it-swarm-eu.dev

Jeden dotaz sql pro výběr záznamu z nadřazené tabulky, pouze pokud mají všechny jeho záznamy v podřízené tabulce hodnoty

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.

7
Harun

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
      ) 
10
ypercubeᵀᴹ
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)
0
msi77