内部连接与 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 的区别的主要内容,如果未能解决你的问题,请参考以下文章