【问题标题】:How to see all data from one table and filtered on another, when using a join query (oracle sql)使用连接查询(oracle sql)时如何查看一个表中的所有数据并在另一个表上过滤
【发布时间】:2022-10-21 19:57:26
【问题描述】:

一旦我执行拆分,我希望看到以下 3 件事:

  1. 来自 CUSTOMERS 的客户记录
  2. 来自 TRANSACTIONS 的所有客户交易行
  3. 在交易 5 和 6 期间从 PURCHASES 购买的物品

    除了第 2 点之外,我在下面的查询获得了大部分权利,因为它只返回事务 5 和 6 而不是完整列表。我能改变什么?

    SELECT * FROM customers c
    INNER JOIN transactions t ON c.custid = t.custid
    INNER JOIN purchaces p ON t.transid = p.transid
    WHERE c.customer = 1234 AND t.trans_num IN (5,6)
    ORDER BY t.trans_num
    
    

【问题讨论】:

  • 如果您想按条件过滤特定表的行,请将 joined 表上的所有过滤器移动到连接条件。并使用left join 而不是join 来保留左表的行

标签: sql oracle


【解决方案1】:

您在 where 语句中明确过滤记录 5 和 6。您可以使用该条件 LEFT JOIN 购买表。您将获得所有交易,但如果购买列不属于交易 5 或 6,则它们将为 NULL。

SELECT * 
FROM customers c
INNER JOIN transactions t 
  ON c.custid = t.custid
LEFT JOIN purchaces p 
  ON t.transid = p.transid 
  AND t.trans_num IN (5,6)
WHERE c.customer = 1234 
ORDER BY t.trans_num

【讨论】:

    猜你喜欢
    • 2013-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-26
    • 2022-11-11
    • 2017-07-31
    • 2017-08-11
    相关资源
    最近更新 更多