【问题标题】:SQL: Query 1 without Query 2SQL:查询 1 没有查询 2
【发布时间】:2013-03-04 07:46:13
【问题描述】:

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

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

【问题讨论】:

    标签: sql filter where


    【解决方案1】:

    使用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;
    

    【讨论】:

      【解决方案2】:
      Select Q1.ParticipantID from (query1) as Q1 where Q1.ParticipantID NOT IN (select participantID from query2)
      

      【讨论】:

        【解决方案3】:

        你可以使用NOT IN

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

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

        SELECT ParticipantID FROM Q1
        EXCEPT
        SELECT ParticipantID FROM Q2
        

        【讨论】:

          【解决方案4】:

          如果你使用的是Sql server:

          你可以使用:

          Except: EXCEPT 返回左侧查询中未在右侧查询中找到的任何不同值。

          语法

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

          例如:

          SELECT ParticipantID
          FROM Q1
          EXCEPT
          SELECT ParticipantID
          FROM Q2;
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2013-05-31
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-12-05
            • 1970-01-01
            相关资源
            最近更新 更多