继我之前的问题here。
我有两张桌子:
表A
表B
我想输出以下内容:
相反,我的查询给了我这个:
这是我的SQL语句:
SELECT TableA.BU, TableB.count_invalid_date
FROM TableA
LEFT JOIN TableB ON TableA.BU = TableB.BU
WHERE TableB.Month = 8
GROUP BY TableA.BU, TableB.count_invalid_date;
是否有一个SQL语句可以提供我想要的内容? SQL Fiddle在这里:http://sqlfiddle.com/#!6/2ab0f/1 提前谢谢!
答案 0 :(得分:3)
试试这个:
SELECT
TableA.BU,
TableB.count_invalid_date
FROM
TableA
LEFT JOIN TableB ON TableA.BU = TableB.BU and TableB.Month = 8
GROUP BY
TableA.BU,
TableB.count_invalid_date;
在进行外部联接时,您不能引用where子句中的任何表,否则会将其转换为内部联接。
答案 1 :(得分:3)
<强>问题:强>
由于您的where
子句显示为TableB.Month=8
,因此其他行将从结果中消除。
<强>解决方案:强>
在where
子句中再添加一个条件。
SELECT TableA.BU, TableB.count_invalid_date
FROM TableA LEFT JOIN
TableB ON TableA.BU=TableB.BU
WHERE (TableB.Month=8 OR TableB.Month IS NULL)
GROUP BY TableA.BU, TableB.count_invalid_date;
结果:
BU COUNT_INVALID_DATE
APAC (null)
EMEA 3
SG (null)
US (null)
请参阅SQL Fiddle中的结果。