【问题标题】:How to write a select case join?如何编写选择案例联接?
【发布时间】:2015-11-29 22:23:33
【问题描述】:

我正在尝试一些结合来自 2 个表和用例的信息的 sql 代码,但它没有返回所有数据。

SELECT TABLE1.PRODUCT, TABLE1.TYPE, TABLE1.AMOUNT,
(CASE
  WHEN TABLE1.PRODUCT = 'RADIO'
    THEN 100
  ELSE 200
  END) AS PRODUCT_CODE,
(CASE
  WHEN TABLE1.TYPE = 'NEW'
     THEN 'Y'
  ELSE TABLE2.AGE
  END) AS STATUS
FROM TABLE1 LEFT JOIN TABLE 2 ON TABLE1.TID = TABLE2.TID
WHERE TABLE1.DATE > '01-AUG-15'
AND TABLE2.DATE = '02-AUG-15'

我遇到的问题是我需要 table1 中的所有记录以及 table2 中应用的所有记录,但是当查询返回的行数少于表 1 中的行数时。

【问题讨论】:

    标签: select if-statement join case


    【解决方案1】:

    你的问题来了

    AND TABLE2.DATE = '02-AUG-15'

    如果Table2.Date 由于左连接而为空,则此条件失败,这就是您获得的行数少于Table1 的原因。从左连接表中向 where 子句添加条件实际上是将其转换为内连接。

    试一试

    AND (TABLE2.DATE = '02-AUG-15' OR TABLE2.DATE IS NULL)

    (这里假定TABLE2.DATE 不可为空)或者将条件放在join 语句中

    FROM TABLE1 LEFT JOIN TABLE 2 ON TABLE1.TID = TABLE2.TID AND TABLE2.DATE = '02-AUG-15'

    【讨论】:

    • 谢谢保罗。将它放在 join 语句中的第二个选项效果很好!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-14
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 2011-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多