2012-04-27 20 views
8

var olup olmadığını kontrol bir tablodan tüm satırların diğer mevcutsa bilmem gerekiyor: SQL Server: Tüm satırların diğer tablodaki

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' 

Bu sorgu yes exists döndürür ama sadece 1 @Table2 mevcut olduğundan no, doesn't exist dönmelidir

, 4 ve 5 değerleri yok.

Sorgumda ne değiştirmeliyim? Teşekkürler!

+0

hm evet, ilk tablodan tüm satırları ikinci tablosunda var (veya vermez) doğrulamak için bool sonucunu ihtiyaç – ihorko

cevap

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

Mükemmel, teşekkürler! – 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

Bu

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

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

Her iki tablo seti farkını almak için EXCEPT kullanabilirsiniz sürece hem id kolonları (bunlar id en iseler olmalıdır) benzersiz olarak çalışacak . herhangi kimlikleri döndürülür, her iki tablo eşit değildir: Herhangi bir farklı değerler de sağ sorguda bulunmayan sol sorgudan getiri HARİÇ

SELECT ID 
FROM @Table1 
EXCEPT 
SELECT ID 
FROM @Table2 

.

Yani, almak için sizin "hayır, mevcut doesnt":

;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