我是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没有数据,则它只能返回空列。 有可能??
希望每个人都能理解我的问题。
答案 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连接。