我想写一个查询,我把第一个子查询的剩余部分拿出来,把第二个查询的所有东西都拿出来,所以基本上(从下面的例子中)讲Q1 - Q2 = 121 - 7 = 114(ParticipantID的是Q1上,而不是在Q2)SQL:查询1没有查询2
select ParticipantID
from
(
Query 1 results (121 in my case)
) AS Q1
Join
(
Query 2 results (7)
) AS Q2
我想写一个查询,我把第一个子查询的剩余部分拿出来,把第二个查询的所有东西都拿出来,所以基本上(从下面的例子中)讲Q1 - Q2 = 121 - 7 = 114(ParticipantID的是Q1上,而不是在Q2)SQL:查询1没有查询2
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
如果你是USIG的SQL Server:
你可以用途:
Except: EXCEPT可从左侧查询中返回任何不在正确查询中找到的不同值。
语法
{ <query_specification> | (<query_expression>) }
{ EXCEPT | INTERSECT }
{ <query_specification> | (<query_expression>) }
如:
SELECT ParticipantID
FROM Q1
EXCEPT
SELECT ParticipantID
FROM Q2;