我正在尝试在SQL-Server上创建一个查询,基本上需要选择table1中的所有数据以及table2和table3中的相关数据(如果该数据存在)或空字符串(如果不存在)。
例如,如果表格如下所示:
table1 table2 table3
| id | name1 | | id1 | name2 | | id1 | name3 |
============== =============== ===============
| 1 | John | | 1 | Alice | | 2 | Fred |
| 2 | Bob | | 3 | Julie | | 3 | Grace |
| 3 | Peter |
我想运行一个查询,它给出了以下结果:
| name1 | name2 | name 3 |
==========================
| John | Alice | |
| Bob | | Fred |
| Peter | Julie | Grace |
我尝试过以下操作,只返回最后一行:
select a.name1, b.name2, c.name3
from table1 a, table2 b, table3 c
where a.id = b.id1 and a.id = c.id1
如何获得我想要的结果?
答案 0 :(得分:2)
请避免使用隐式连接语法(逗号分隔)并使用 显式连接语法!(JOIN / LEFT JOIN / FULL JOIN)你的查询的问题是你需要一个左连接,而不是内连接所以:
SELECT a.name1,b.name2,c.name3
FROM table1 a
LEFT OUTER JOIN table2 b
ON(a.id = b.id)
LEFT OUTER JOIN table3 c
ON(a.id = c.id)
仅仅为了知识,使用隐式连接语法在右表条件的左侧外连接语法(+)。