我有2个表,例如:
Versions Names Cell
ID Version ID Name Indicator ID Number
1 1.0 1 Joe Y 1 1234
2 1.1 1 Black N 2 5678
3 1.2 2 David N 3 4786
4 2.0 2 Troy N
2 George Y
预期产出
ID Number Version Name Indicator
1 1234 1.0 Joe Y
2 5678 1.1 George Y
3 4786 1.2 NULL NULL
我想要
我想我需要LEFT JOIN。这不会给我预期的输出。我哪里错了?
SELECT a.ID, b.Number, a.Version, c.Name, c.Indicator
FROM Version a LEFT JOIN Cell b ON a.ID = b.ID
LEFT JOIN Names c ON a.ID = c.ID
WHERE a.Version LIKE '1%' AND c.Indicator = 'Y'
答案 0 :(得分:1)
在"外部联合"上应用条件WHERE
子句中的表有效地将外连接转换为内连接,因为外连接保留的每一行在该列中都包含null
值,但条件c.Indicator = 'Y'
在where子句中将再次删除这些行。
要解决此问题,请将c.Indicator = 'Y'
移至加入条件:
SELECT a.ID, b.Number, a.Version, c.Name, c.Indicator
FROM Version a
LEFT JOIN Cell b ON a.ID = b.ID
LEFT JOIN Names c ON a.ID = c.ID AND c.Indicator = 'Y'
WHERE a.Version LIKE '1%'
答案 1 :(得分:0)
我回答有两个原因:
version
条件不正确。所以,我认为你真的想要:
SELECT v.ID, c.Number, v.Version, n.Name, n.Indicator
FROM Version v LEFT JOIN
Cell c
ON v.ID = c.ID LEFT JOIN
Names n
ON v.ID = n.ID AND n.Indicator = 'Y'
WHERE v.Version LIKE '1.%';
.
的原因是WHERE
子句与11.0
或101.3
不匹配。
更改表别名的原因是因为使用表缩写的查询更容易理解。