Mám tabulku 1 a tabulku 2, Tabulka 1 je PK tabulky FK2. Teď musím provést výběr z tabulky1, pokud a pouze v případě, že všechny záznamy v tabulce2 odpovídající záznamu v tabulce 1 mají hodnoty (pokud je jakákoli hodnota pole null, pak přeskočte).
tj. pro id v tabulce 1 je v tabulce 2 více sub idů. Z těchto více idů, pokud konkrétní pole odpovídá jednomu id je null, pak výběr by měl být přeskočen.
Kdokoli, prosím, pomozte mi napsat jeden dotaz na SQL pro tento požadavek.
Tomu se říká „anti-join“ (neboli antisemijoin). Jedním ze způsobů, jak to napsat v SQL, je použít NOT EXISTS
konstrukce:
SELECT t1.*
FROM Table1 AS t1
WHERE NOT EXISTS
( SELECT *
FROM Table2 AS t2
WHERE t2.FKcolumn = t1.PKcolumn
AND t2.columnX IS NULL
)
Pokud chcete - jako svůj komentář - chcete zobrazit nadřazený řádek (v tabulce 1), který se netýká žádného podřízeného řádku (v tabulce 2), přidejte jej (nebo se připojte k tabulce2, pokud chcete také sloupce z druhé zobrazené tabulky):
AND EXISTS
( SELECT *
FROM Table2 AS t2
WHERE t2.FKcolumn = t1.PKcolumn
)
select t1.* from table1 t1
where exists(select 1 from table2 t2 where t2.FKcolumn = t1.PKcolumn
having count(*)=count(t2.columnX) and count(*)>0)