2012-04-27 12 views
8

ho bisogno di sapere se tutte le righe da una tabella esiste in altri:SQL Server: controllare se tutte le righe esiste in altra tabella

declare @Table1 table (id int) 
declare @Table2 table (id int) 

insert into @Table1(id) values (1) 
insert into @Table1(id) values (4) 
insert into @Table1(id) values (5) 


insert into @Table2(id) values (1) 
insert into @Table2(id) values (2) 
insert into @Table2(id) values (3) 

if exists (select id from @Table1 where id in (select id from @Table2)) 
    select 'yes exists' 
else 
    select 'no, doesn''t exist' 

Questa query restituisce yes exists ma dovrebbe tornare no, doesn't exist perché solo 1 esiste in @Table2, i valori 4 e 5 no.

Cosa devo cambiare nella mia domanda? Grazie!

+0

hm, sì, ho bisogno risultato bool per verificare che tutte le righe da prima tabella esiste in seconda tabella (o non) – ihorko

risposta

8
IF NOT EXISTS (
    SELECT ID FROM @Table1 
    EXCEPT 
    SELECT ID FROM @Table2 
) 
SELECT 'yes exists' 
ELSE SELECT 'no, doesn''t exist' 
+0

Perfetto, grazie! – ihorko

0
select case when count(*) > 0 then 'no' else 'yes' end as AllExist 
from @Table1 t1 
left outer join @Table2 t2 on t1.id = t2.id 
where t2.id is null 
0

Questo potrebbe funzionare più a lungo entrambe le colonne id sono unici (che essi dovrebbero essere, se sono di id)

DECLARE @totalRows int; 
SET @totalRows = SELECT count(*) from Table1; 

RETURN (@totalRows == SELECT count(*) from Table1 JOIN Table2 on Table1.id = Table2.id) 
2

si potrebbe usare EXCEPT per ottenere la differenza set di entrambe le tabelle . Se alcuni ID sono restituiti, entrambe le tabelle non sono uguali:

SELECT ID 
FROM @Table1 
EXCEPT 
SELECT ID 
FROM @Table2 

SALVO restituisce tutti i valori distinti della query a sinistra che non si trovano anche sulla query destra.

Quindi, per ottenere il vostro "no, pretende molto esistono":

;WITH diff AS(
    SELECT ID 
    FROM @Table1 
    EXCEPT 
    SELECT ID 
    FROM @Table2 
) 
SELECT CASE WHEN COUNT(diff.ID) = 0 
     THEN 'yes exists' 
     ELSE 'no, doesnt exist' 
     END AS Result 
FROM diff 
Problemi correlati