使用唯一数据连接 SQL 表(列数不同!)

Posted

技术标签:

【中文标题】使用唯一数据连接 SQL 表(列数不同!)【英文标题】:Join SQL Tables with Unique Data (Not same number of columns!) 【发布时间】:2014-05-19 16:39:08 【问题描述】:

如何在确保主键/外键不重复的同时,连接三个或四个行数不同的 SQL 表?

结构:

表 1:id、first_name、last_name、email

Table2:id(独立于表1中的id)、name、location、table1_id、table2_id

表 3:id、名称、位置

我想要表 1 中的所有数据,然后是表 2 中与 table1_id 对应的所有数据,没有重复。

对于一个新人来说有点棘手......

【问题讨论】:

table3和这个问题有什么关系? 你的意思是“表2中的所有数据都与table1_id对应,没有重复”?您能否提供示例数据来说明您关注的问题? 【参考方案1】:

不确定你想用 Table3 做什么。

LEFT JOIN 返回 LEFT 表中的所有记录,以及右表中的匹配记录。如果没有匹配(从右侧),则结果为 NULL。

举个例子:

SELECT * FROM Table1 AS t
LEFT JOIN Table2 AS tt
ON t.id = tt.id

LEFT表是指LEFT JOIN之前的表语句,RIGHT表是指LEFT JOIN之后的表语句。如果你也想在 Table3 中添加,使用相同的逻辑:

SELECT * FROM Table1 AS t
LEFT JOIN Table2 AS tt
ON t.id = tt.id
LEFT JOIN Table3 AS ttt
ON t.id = ttt.id

请注意,我使用表的别名(通过使用 AS),以便我可以更轻松地引用特定表。例如,t 指 Table1,tt 指 Table2,ttt 指 Table3。

联接经常在 SQL 中使用,因此查看以下内容很有用:INNER JOIN、RIGHT JOIN、FULL JOIN 和 SELF JOIN。

希望这会有所帮助。

祝你学习顺利!

【讨论】:

【参考方案2】:

你会想要使用LEFT JOIN

SELECT * FROM table1 LEFT JOIN table2 ON Table1.ID = Table2.table1_id 

【讨论】:

除非我误解了你的需要。 我不这么认为。看起来更像 LEFT JOIN,因为他想要 table1 中的所有数据。 Doh,我是这么想的,然后还是写了 INNER。谢谢。

以上是关于使用唯一数据连接 SQL 表(列数不同!)的主要内容,如果未能解决你的问题,请参考以下文章

从表连接中获取唯一的数据对

Python Pandas - 连接两个具有不同行数和列数的数据框

连接具有不同列数的两个表

我们可以对两个不同的数据库表使用连接吗?

从多表连接后的select count(*)看待SQL优化

使用 Informatica 连接位于不同数据库中的多个表