sql - 如果存在,则从引用表中选择数据,如果不存在,则选择空字符串

时间:2016-03-09 15:51:41

标签: sql-server

我正在尝试在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

如何获得我想要的结果?

1 个答案:

答案 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)

仅仅为了知识,使用隐式连接语法在右表条件的左侧外连接语法(+)。