2012-04-27 36 views
8

Tôi cần phải biết nếu tất cả các hàng từ một bảng tồn tại trong khác:SQL Server: kiểm tra xem tất cả các hàng tồn tại trong bảng khác

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' 

truy vấn này trả yes exists nhưng phải trả lại no, doesn't exist bởi vì chỉ có 1 tồn tại trong @Table2, giá trị 4 và 5 thì không.

Tôi nên thay đổi gì trong truy vấn của mình? Cảm ơn!

+0

hm, vâng, tôi cần kết quả bool để xác minh rằng tất cả các hàng từ bảng đầu tiên tồn tại trong bảng thứ hai (hoặc không) – ihorko

Trả lời

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

Hoàn hảo, cảm ơn! – 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

này sẽ làm việc như miễn là cả hai cột id là duy nhất (mà họ nên nếu họ là id của)

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

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

Bạn có thể sử dụng EXCEPT để có được sự khác biệt bộ của cả hai bảng . Nếu bất kỳ ID được trả về, cả hai bảng không bằng nhau:

SELECT ID 
FROM @Table1 
EXCEPT 
SELECT ID 
FROM @Table2 

TRỪ lợi nhuận bất kỳ giá trị khác biệt từ các truy vấn trái mà không phải là cũng được tìm thấy trên các truy vấn ngay.

Vì vậy, để có được bạn "không, doesnt tồn tại":

;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 
Các vấn đề liên quan