【发布时间】:2014-07-29 05:31:02
【问题描述】:
我有几个表,它们都有一个唯一的 ID 字段。我想在这个 ID 字段上加入他们。更准确地说,我想从每个表中提取一列,并将所有提取的列与 ID 值对齐。这些表没有所有 ID 值的条目;我希望结果对于至少一个表中存在的每个 ID 值都有一行。如果其中一个表中缺少 Id,则结果应具有 null。我不在乎如果 Id 值在表中不是唯一的会发生什么(在我的数据中,它们是唯一的)。
玩具示例:我有一张plant 桌子
Id Name Class
1 larch pinopsida
3 horse chestnut angiosperms
还有一个animal 表
Id Name Cry
1 cat meow
2 dog bow wow
4 carp
还有一个mineral 表
Id Name Color
2 diamond white
3 emerald green
我想将它们组合成
Id Plant Animal Mineral
1 larch cat (null)
2 dog diamond
3 horse chestnut (null) emerald
4 (null) carp (null)
据我所知,这不是直接的 inner join,因为它只会保留所有数据库中存在的 ID,也不是直接的 left join 或 right join,因为这只会保留存在于其中一张表(没有一张表包含所有 Id 值),也不是直接的 outer join 或 cross join,因为它们会将 Id 分布在多行上。
数据库是 SQL Server 2012。我直接访问它,而不是通过其他编程语言。真正的查询是 https://data.stackexchange.com/cs/query/36599/show-all-types — 肯定有比列出所有可以相等的 Id 列对更好的方法。
【问题讨论】:
标签: sql sql-server join