SQL:没有查询2的查询1

时间:2013-03-15 14:34:14

标签: sql filter where

我正在尝试编写一个查询,其中我将第一个子查询的剩余部分取出,并将第二个的所有部分取出,所以基本上(从下面的示例中)说Q1 - Q2 = 121 - 7 = 114(ParticipantID的那个是在Q1而不是在Q2)

select ParticipantID
 from
 (
 Query 1 results (121 in my case)
 ) AS Q1
 Join 
 (
 Query 2 results (7)
 ) AS Q2

4 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

Select Q1.ParticipantID from (query1) as Q1 where Q1.ParticipantID NOT IN (select participantID from query2)

答案 2 :(得分: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

答案 3 :(得分: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;