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 中的结果。
继续我之前的问题 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 中的结果。