21. září bude sraz! Od 18.00 v restauraci Tradice v Praze u Anděla
Autor Zpráva
Nailen
Profil
Zdravím,

nedaří se mi sestavit SQL dotaz. Problém jsem se snažil vysvětlit na následujícím obrázku.

Stručně řečeno mám dvě tabulky. V tabulce 2 mám seznam (list) nějakých dat. Statusem určuji, které položky jsou aktivní. V tabulce 1 mám uživatele a k nim vybrané (přiřazené) hodnoty ze seznamu v tabulce 2. Nyní potřebuji dotazem zjistit které hodnoty z tabulky 2 nemá konkrétní uživatel (např. user_id = 2) přiřazené v tabulce 1. Zároveň musí platit, že z tabulky 2 mě zajímají pouze aktivované hodnoty. Status=1

Předem díky za pomoc.
Radek9
Profil
Nějak naivně třeba takto:
SELECT *
FROM tab2 t2
WHERE t2.status = 1
  AND NOT EXISTS (
    SELECT 1
    FROM tab1 t1
    WHERE t1.tab2_id = t2.id
      AND t1.user_id = USER_ID
  )
Nailen
Profil
Radek9:

Děkuji za Vaši radu.

Nějak mi to ale nefunguje. Vrací mi to prázdný výsledek. Když ten příkaz rozdělím tak první select mi vrací tři hodnoty. Když vezmu samostatně druhý select, tak ten mi háže chybu, že nezná t2.id. Není potřeba do toho druhého selectu ty tabulky spojit pomocí JOIN?


Nailen, Radek9:

Tak beru zpět. Měl jsem tam chybu v databázi. Už to frčí,. Děkuji za pomoc.
Kajman
Profil
Pro zastaralé databáze bez podpory poddotazů to bylo potřeba dříve psát nějak takto
SELECT t2.*
FROM   tab2 t2
LEFT JOIN tab1 t1
       ON t1.tab2_id = t2.id
          AND t1.user_id = USER_ID
WHERE t2.status = 1
      AND t2.id IS NULL
Také tam méně hrozila chyba plánovače (také starší verze mysql).

Ale není to pro lidi tak čitelné jako dotaz od Radka9

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0