【问题标题】:SQL Join: Everything in the LEFT table that is NOT IN the RIGHT Table [duplicate]SQL联接:左表中不在右表中的所有内容[重复]
【发布时间】:2023-03-26 02:23:01
【问题描述】:

我有两个表,“Affiliates”和“ControlPanels”。

ControlPanels 有一个字段 (CP_AffiliateID) 映射到附属公司 (A_ID)。

我想从 CP_AffiliateID 中不匹配的 Affiliates 中选择所有记录。

字段 A_ID 是主键,所以我不担心匹配 NULL。

这个连接会是什么样子?

【问题讨论】:

  • Affiliates LEFT OUTER JOIN ControlPanels ON A_id = cp_affiliateID WHERE ControlPanels.CP_AffiliateID IS NULL 或者你可以做FROM Affiliates aff WHERE NOT EXISTS (SELECT 1 FROM ControlPanels cp WHERE cp.cp_affiliate_id = aff.a_id)
  • @JNevill,谢谢!我不认为这是一个 dup b/c 我不关心在 NULL 上的匹配,因为 A_ID 是一个主键。 HTH。
  • @nbardach 更仔细地查看副本以及它与您的问题的关系。在CP_AffiliateID 中寻找NULL 绝对是正确的方法。 A_ID 是主键并不重要。
  • @Tab Aleman,实际上,并不是我想要来自 CP_AffiliateID 为 NULL 的附属公司的所有记录。只是如果CP_AffiliateID中有'5',我不想包括来自A_ID ='5'的Affiliates的记录;

标签: sql-server join


【解决方案1】:

请尝试不在

SELECT * 
FROM   affiliates 
WHERE  affiliates.a_id NOT IN (SELECT cp_affiliateid 
                                  FROM   controlpanels) 

【讨论】:

  • 我认为这是最优雅的解决方案。谢谢,哈迪克!
  • 欢迎@nbardach :)
【解决方案2】:

您实际上并不需要加入,只需使用!= ALL (subquery)

SELECT * FROM Affiliates A 
WHERE a.A_ID != ALL (SELECT C.CP_AffiliateID FROM ControlPanels C)

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2018-02-25
  • 2018-01-21
  • 1970-01-01
  • 2016-12-13
  • 1970-01-01
  • 2013-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多