SQL 连接包括一个 table 中的所有行,而不管另一个 table 中代表了多少行

SQL join including all rows from one table irrespective of how many are represented in the other table

继续我之前的问题 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 提前致谢!

试试这个:

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子句中引用任何table,否则会变成内连接。

问题:

由于您的 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 中的结果。