Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Subqueries
Forum PHP.pl > Forum > Bazy danych > MySQL
phoenix84
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.
yevaud
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;
Mchl
W ogólności powinno działać, tylko po co tutaj GROUP BY?
yevaud
poniewaz w t2 wartosc nie jest unikalna
Mchl
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)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.