我正在尝试编写一个查询,在其中取出第一个子查询的剩余部分并取出第二个子查询的所有内容,所以基本上(从下面的示例中)说 Q1 - Q2 = 121 - 7 = 114(ParticipantID 在 Q1而不是在第二季度)
select ParticipantID
from
(
Query 1 results (121 in my case)
) AS Q1
Join
(
Query 2 results (7)
) AS Q2
使用NOT IN
谓词:
select ParticipantID
from
(
-- Query 1 results
) AS Q1
WHERE ParticipantID NOT IN(
-- SELECT ParticipantID
-- FROM Query 2 results
)
或者,LEFT JOIN
SELECT ...
FROM
(
--- Query 1 results
) AS Q1
LEFT JOIN
(
-- Query 2
) AS Q2 ON ... -- JOIN condition here
WHERE Q2.ParticipantID IS NULL;
Select Q1.ParticipantID from (query1) as Q1 where Q1.ParticipantID NOT IN (select participantID from query2)
您可以使用NOT IN
:
SELECT * FROM Q1
WHERE id NOT IN (SELECT ParticipantID FROM Q2)
或使用EXCEPT
(或MINUS
,取决于数据库引擎):
SELECT ParticipantID FROM Q1
EXCEPT
SELECT ParticipantID FROM Q2
如果您使用的是 Sql 服务器:
您可以使用:
除外:EXCEPT 返回左侧查询中未在右侧查询中找到的任何不同值。
句法
{ <query_specification> | ( <query_expression> ) }
{ EXCEPT | INTERSECT }
{ <query_specification> | ( <query_expression> ) }
例如:
SELECT ParticipantID
FROM Q1
EXCEPT
SELECT ParticipantID
FROM Q2;