2013-03-15 169 views
0

我想写一个查询,我把第一个子查询的剩余部分拿出来,把第二个查询的所有东西都拿出来,所以基本上(从下面的例子中)讲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 

回答

0

使用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; 
0
Select Q1.ParticipantID from (query1) as Q1 where Q1.ParticipantID NOT IN (select participantID from query2) 
0

您可以使用NOT IN

SELECT * FROM Q1 
WHERE id NOT IN (SELECT ParticipantID FROM Q2) 

或者使用EXCEPT(或MINUS,取决于数据库引擎):

SELECT ParticipantID FROM Q1 
EXCEPT 
SELECT ParticipantID FROM Q2 
0

如果你是USIG的SQL Server:

你可以用途:

Except: EXCEPT可从左侧查询中返回任何不在正确查询中找到的不同值。

语法

{ <query_specification> | (<query_expression>) } 
{ EXCEPT | INTERSECT } 
{ <query_specification> | (<query_expression>) } 

如:

SELECT ParticipantID 
FROM Q1 
EXCEPT 
SELECT ParticipantID 
FROM Q2;