从具有空数据的三个不同表中选择数据

时间:2014-05-27 09:15:08

标签: sql

我是Sql的新手。我的问题是how to get data from three different tables with null values.

我尝试过如下查询:

SELECT *
FROM [USER]
JOIN [Location] ON ([Location].UserId = [USER].Id)
JOIN [ParentChild] ON ([ParentChild].UserId = [USER].Id) WHERE ParentId=7

我从this link找到。

它的工作正常但是,它不会获取与ParentId

相关的所有数据和每个数据

类似于它只获取所有表中可用的数据,但是也省略了一些在位置表中不可用但在给定的ParentId下的数据。

例如:

+----------+-------------+
|  UserId  |   ParentId  |
+----------+-------------+
|    1     |      7      |
+----------+-------------+
|    8     |      7      |
+----------+-------------+

对于userId 8,Location表中有可用的数据,因此它会获取所有数据。但是位置表中没有userId 1的数据,因此查询不适用于此。

但我想要所有数据。 如果userId没有数据,则它只能返回空列。 有可能??

希望每个人都能理解我的问题。

1 个答案:

答案 0 :(得分:2)

如果您总是想要返回一个用户列表,但有些用户可能没有位置,那么您想要从"内部加入"更改连接类型。 (或者你用短手"加入")到"左加入"。

SELECT *
FROM [USER]
INNER JOIN [ParentChild] ON ([ParentChild].UserId = [USER].Id) 
LEFT JOIN [Location] ON ([Location].UserId = [USER].Id)
WHERE ParentId=7

这并不能说明没有父母的用户。如果您仍然想要返回没有父级的用户,那么您还需要将JOIN类型更改为ParentChild表,也可以更改为LEFT连接。