【问题标题】:SQL Query Joining 2 Tables and Getting Required DataSQL 查询连接 2 个表并获取所需数据
【发布时间】:2013-12-17 10:16:33
【问题描述】:

我有 2 张桌子: 具有 3 列 MerchantID、MemberID、MerchantName 的商家 具有 3 列 MemberID、ReportID、MemberName 的成员

样本值为:

MerchantID MemberID MerchantName
1101       101      ABC
1102       102      DEF
1103       103      XYZ

MemberID   ReportID MemberName
101        112      GHI
101        111      JKL
101        115      MNO
102        111      kjh
102        116      hgf
102        117      oiu
103        118      hgh
103        119      jhf

我需要获取具有与 111 报告 ID 无关的会员 ID 的 MerchantNames。

The query o/p should be: XYZ.

请告诉我可以实现此目的的最优化的 SQL 查询。 提前致谢。

【问题讨论】:

  • 我用 NOT IN 尝试了一些东西,但从未返回所需的 o/p。错过了使用 NOT EXISTS,现在可以完美运行。谢谢!
  • 我知道你现在有一个可行的解决方案,但我只是想指出 NOT IN 也应该在这种情况下工作。

标签: sql oracle join


【解决方案1】:

这是EXISTS 运算符的经典用例:

SELECT MerchantName
FROM   Merchant
WHERE  NOT EXISTS (SELECT 1
                   FROM   Member
                   WHERE  Member.MemberId = Merchant.MemberId AND 
                          ReportId = 111) 

【讨论】:

  • 非常感谢您的及时回复!
  • 您是否知道 Oracle 必须添加特殊代码来处理不正确的 SELECT 1,因为互联网上的都市传说比正确的 SELECT * 更好?所以,SELECT 1 工作,但我仍然畏缩看到它。它不应该存在。
【解决方案2】:

加入:

SELECT mer.MerchantName FROM [Merchant] mer
 LEFT JOIN [Member] mem ON mer.MemberId = mem.MemberId
  AND mem.ReportId != 111;  

或者

SELECT mer.MerchantName FROM [Merchant] mer
 LEFT JOIN [Member] mem ON mer.MemberId = mem.MemberId
  AND mem.ReportId <> 111;

【讨论】:

    猜你喜欢
    • 2016-05-18
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 2017-12-06
    • 1970-01-01
    • 2012-08-23
    • 2016-12-04
    • 2021-10-07
    相关资源
    最近更新 更多