Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Subqueries, lista rekordow, ktorych nie ma w innej tabeli
phoenix84
post 17.06.2010, 00:47:48
Post #1





Grupa: Zarejestrowani
Postów: 218
Pomógł: 0
Dołączył: 14.04.2004
Skąd: Słupsk, Nowy Sącz

Ostrzeżenie: (0%)
-----


Nie za bardzo wiem jak sformulowac zapytanie, poczytalem o subqueries, ale chyba nie umiem tego wykorzystac...
mam 2 tabele
T1 zawiera kolumne z numerem karty, ta kolumna jest UNIQUE czyli kazda karta ma tylko jeden rekord
T2 zawiera uzycia kart... wsrod kolumn jest tez taka z numerem karty, tu nie ma UNIQUE, bo kazda karta moze byc uzyta wiele razy

sytuacja idealna jest wtedy kiedy w T2 uzywano tylko kart z T1... ale musze uzyskac liste kart, ktorych jeszcze w T1 nie ma...

czyli potrzebuje cos w stylu (to nie instrukcja, a moja jej wizja tongue.gif)

select distinct T2.karty where t2.karty not exists in t1.karty;

efekt ma byc taki, ze dostaje liste kart, ktore zostaly uzyte (sa w T2), ale nie mam ich zaindeksowanych (nie ma ich w T1)

czy ktos ma pomysl na zapytanie? smile.gif

pozdrawiam,

k.

Ten post edytował phoenix84 17.06.2010, 00:54:30
Go to the top of the page
+Quote Post
yevaud
post 17.06.2010, 02:48:51
Post #2





Grupa: Zarejestrowani
Postów: 471
Pomógł: 89
Dołączył: 29.07.2008
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


moze tak

  1. SELECT
  2. t2.karty, t1.karty
  3. FROM
  4. t2
  5. LEFT OUTER JOIN t1.karty ON t1.karty = t2.karty
  6. GROUP BY
  7. t2.karty
  8. HAVING
  9. t1.karty IS NULL;


Ten post edytował yevaud 17.06.2010, 02:50:06
Go to the top of the page
+Quote Post
Mchl
post 17.06.2010, 12:19:02
Post #3





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

Ostrzeżenie: (0%)
-----


W ogólności powinno działać, tylko po co tutaj GROUP BY?
Go to the top of the page
+Quote Post
yevaud
post 17.06.2010, 23:16:24
Post #4





Grupa: Zarejestrowani
Postów: 471
Pomógł: 89
Dołączył: 29.07.2008
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


poniewaz w t2 wartosc nie jest unikalna
Go to the top of the page
+Quote Post
Mchl
post 17.06.2010, 23:28:50
Post #5





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

Ostrzeżenie: (0%)
-----


To wypadałoby użyć modyfikatora DISTINCT, a nie GROUP BY, który stosuje się do grupowania wyników funkcji agregujących.

Kod
SELECT DISTINCT
  t2.karty
FROM
  t2
LEFT JOIN
  t1
ON
  t1.karty = t2.karty
WHERE
  t1.karty IS NULL


i tak naprawdę phoenix niedaleko był poprawnego rozwiązania w swoim własnym poście

Kod
SELECT DISTINCT
  t2.karty
FROM
  t2
WHERE
  t2.karty NOT IN (SELECT karty FROM t1)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 07:40