Autor | Zpráva | ||
---|---|---|---|
Nailen Profil |
#1 · Zasláno: 15. 3. 2018, 18:47:13
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 |
#2 · Zasláno: 15. 3. 2018, 19:18:02
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 t1.id IS NULL Ale není to pro lidi tak čitelné jako dotaz od Radka9 |
||
Časová prodleva: 5 let
|
0