如何编写精选案例连接?

时间:2015-09-03 22:41:17

标签: select if-statement join case

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

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中的行时。

1 个答案:

答案 0 :(得分:2)

你的问题在这里

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'