2012-04-27 15 views
8

Muszę wiedzieć, jeśli istnieje, wszystkie wiersze z jednej tabeli w drugiej:SQL Server: sprawdź, czy wszystkie wiersze istnieje w innej tabeli

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' 

Ta kwerenda zwraca yes exists ale powinien wrócić no, doesn't exist bo tylko 1 istnieje w @Table2, wartości 4 i 5 nie.

Co należy zmienić w zapytaniu? Dzięki!

+0

hm, tak, muszę wynik bool aby sprawdzić, czy istnieje wszystkie wiersze z pierwszej tabeli w drugiej tabeli (lub nie) – ihorko

Odpowiedz

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

Doskonały, dzięki! – 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

to będzie działać tak długo, jak obie kolumny id są unikatowe (które powinny być, jeśli są identyfikatory)

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

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

Można użyć EXCEPT aby uzyskać zadaną różnicę obu tabelach . Jeśli zwracane są jakieś ID, obie tabele nie są równe:

SELECT ID 
FROM @Table1 
EXCEPT 
SELECT ID 
FROM @Table2 

OPRÓCZ zwrotów wszelkie odrębne wartości z lewej zapytania, które nie są również na prawej zapytania.

Tak więc, aby dostać swój „nie robi istnieje”:

;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 
Powiązane problemy