8

あるテーブルのすべての行が他のテーブルに存在するかどうかを知る必要があります。

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' 

このクエリは返されますが、 には1 しか存在せず、値 4 と 5 は存在しないため、返されるyes existsはずです。no, doesn't exist@Table2

クエリで何を変更すればよいですか? ありがとう!

4

4 に答える 4

9
IF NOT EXISTS (
    SELECT ID FROM @Table1
    EXCEPT
    SELECT ID FROM @Table2
)
SELECT 'yes exists'
ELSE SELECT 'no, doesn''t exist'
于 2012-04-27T15:56:31.337 に答える
2

EXCEPT両方のテーブルのセットの差を取得するために使用できます。いずれかのIDが返された場合、両方のテーブルは等しくありません。

SELECT ID
FROM @Table1
EXCEPT 
SELECT ID
FROM @Table2

EXCEPTは、右側のクエリでも見つからない、左側のクエリからの個別の値を返します。

だから、あなたの「いいえ、存在しません」を取得するには:

;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
于 2012-04-27T15:57:27.517 に答える
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
于 2012-04-27T15:55:02.567 に答える
0

これは、両方のID列が一意である限り機能します(IDの場合は一意である必要があります)

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

RETURN (@totalRows == SELECT count(*) from Table1 JOIN Table2 on Table1.id = Table2.id)
于 2012-04-27T15:55:09.137 に答える