SQL连接包括来自一个表的所有行,而不管在另一个表中表示了多少行

时间:2015-02-22 07:08:39

标签: sql sql-server tsql

继我之前的问题here

我有两张桌子:

表A

TableA

表B

TableB

我想输出以下内容:

Desired Output

相反,我的查询给了我这个:

Current Output

这是我的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 提前谢谢!

2 个答案:

答案 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中的结果。