我正在尝试一些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中的行时。
答案 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'