内部连接与 MySQL 的区别

Posted

技术标签:

【中文标题】内部连接与 MySQL 的区别【英文标题】:INNER JOIN DISTINCT with MySQL 【发布时间】:2011-04-20 18:17:29 【问题描述】:

我有一个 mysql 问题。我有两张这样的表需要连接在一起。

表:

id otherid2 1 | 1 2 | 1 3 | 2 4 | 2

表2:

otherid otherid2 1 | 1 2 | 1 3 | 2 4 | 2

我正在使用:

SELECT id,otherid FROM table INNER JOIN table2 ON table.otherid2=table2.otherid2

这给了我:

身份证号码 1 | 1 1 | 2 2 | 1 2 | 2 3 | 3 3 | 4 4 | 3 4 | 4

如您所见,我得到了重复的 id,因为 table2 中存在不唯一的 otherid2。我需要的是 INNER JOIN DISTINCT 以某种方式,我只希望结果如下。不重复。

这就是我想要的:

身份证号码 1 | 1 2 | 1 3 | 3 4 | 3

我能以简单的方式做到这一点吗?

【问题讨论】:

您决定要丢弃连接中的哪些行的依据是什么?例如?对于 ID 4,有 2 行的 otherid 为 3 和 4。你在什么基础上丢弃了 otherid 4 的行并选择了 otherid = 3 的行? 我看不出你是如何得到 3|3 或 4|3 的,除非前两个表中没有显示值。另外,根据您在此处显示的内容,我看不出您是如何获得 2|2 的。 尝试使用子查询(参见dev.mysql.com/doc/refman/5.5/en/join.html)。不是非常理想,但非常有效。 @InSane:我想要 table2 中 id 最低的行。 @James Black - 但这就是我在 mysql 中运行查询时得到的结果。 id是table的主键,otherid是table2的主键。 【参考方案1】:

如果你想要 table2 中 id 最低的行,应该这样做

SELECT id, min(otherid)
FROM table 
INNER JOIN table2 
ON table.otherid2=table2.otherid2
GROUP BY id

【讨论】:

谢谢!我今天一定很累.. :) @Martin - 同意 :-) 当你错过这样的事情时,该回家了! :-)【参考方案2】:

在您的评论中,您想要最低的,那么我建议一个 group by 和一个 min aggregator

SELECT id, MIN(otherid) AS otherid ... GROUP BY id

【讨论】:

以上是关于内部连接与 MySQL 的区别的主要内容,如果未能解决你的问题,请参考以下文章

sqlserver 的交叉连接和内部连接有啥区别吗?

PHP数据库连接mysql与mysqli的区别与用法

MySQL 的内连接、左连接、右连接有啥区别?

python3-连接MySQL(mysql.connector与MySQLdb区别)

PHP数据库连接mysql与mysqli的区别与用法

自然连接和内连接的区别