【问题标题】:Convert sub-query with "NOT IN" operator to join with multiple tables使用“NOT IN”运算符转换子查询以加入多个表
【发布时间】:2014-01-21 10:38:26
【问题描述】:

我需要将以下子查询转换为 JOIN。在这里,我在内部查询中已经有了 JOIN 运算符。请帮忙。

选择 * 来自顾问 WHERE Con​​sultants.ConsIntID 不在(选择 Links.ToID FROM Links 加入提醒 ON Links.FromID = Reminders.RemIntID AND ApptSubType = '已放置' 和 ToID 像 'CS%')

【问题讨论】:

标签: sql sql-server join subquery


【解决方案1】:

好的,所以您可能不应该将其更改为我将使用 NOT EXISTS 的联接,这样做的原因已说明 here

我还替换了您古老的连接语法并添加了别名来解决这个问题。下面显示的方法已经被接受了大约 22 年的标准,并且是 preferred 编写查询的方式。

SELECT C.* 
FROM   Consultants  as C -- aliases are very useful for clarity
WHERE  
NOT EXISTS (
        SELECT 1
         FROM   Links as L 
         INNER JOIN Reminders  as R --New join syntax
            ON  L.FromID = R.RemIntID 
         WHERE C.ConsIntID = L.ToID 
         AND ApptSubType = 'Placed' 
         AND ToID LIKE 'CS%'
            ) 

【讨论】:

    【解决方案2】:
    SELECT * 
    FROM   Consultants 
    WHERE  Consultants.ConsIntID 
    NOT IN  (SELECT Links.ToID 
             FROM   Links 
             JOIN   Reminders  ON(Links.FromID = Reminders.RemIntID)
             WHERE  ApptSubType = 'Placed' 
                    AND ToID LIKE 'CS%') 
    

    【讨论】:

      猜你喜欢
      • 2015-01-30
      • 1970-01-01
      • 2012-02-07
      • 1970-01-01
      • 1970-01-01
      • 2015-09-16
      • 2021-06-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多