MySQL连接会产生重复行

22

我有两个表格,使用连接查询从这两个表中获取公共记录。我已经使用以下查询,但我的问题是我得到了重复的记录。查询如下:

SELECT * FROM pos_metrics pm INNER JOIN pos_product_selling pps ON   
pm.p_id=pps.p_id WHERE pm.p_id='0' AND pps.pos_buying_id='0' AND pm.type=1

pos_metrics表:
图片描述

pos_product_selling表: 图片描述

输出结果:

图片描述

编辑:
当我尝试同时使用GROUP BY和DISTINCT时,没有获得重复的数据,但是第二个表中的值重复了。是否还有其他解决方案?

6个回答

22

试试这些类似的东西

GROUP BY pos_product_selling.metrics

5
你能否评论一下你的答案? - Martin Prikryl
答案很简单但没有展示,哈哈,谢谢Jayak ;) - kiamoz

11

试试这个:

SELECT DISTINCT * FROM ...
GROUP BY pm.metrics

2
这个是有效的,但这是否是正确的做法呢?我正在处理成千上万条记录。 - Deepak

8
pos_metrics表中添加主键并将其引入到pos_product_selling表中,然后基于该主键和其他条件进行JOIN。这样就不会出现重复了。
之所以出现重复是因为在这两个表中,没有可能对一个值进行唯一比较。

3
你所说的“并将其引入到pos_product_selling表中”,意思是将其添加到pos_product_selling表中。 - Ricky Boyce
1
@Ricky B 的意思是在 pos_product_selling 表上创建一个列,其值为 pos_metrics 上的主键。这样的列通常被命名为 "pos_metrics_id"。 - Favourite Onwuemene

5

为了消除重复项,请使用distinct:

select distinct * from ...

但我感觉你的问题是关于其他方面的,你需要发布具体代码以获得更多帮助。

我的感觉是你需要在某个地方使用group by/having,但是你的问题缺乏上下文。 - Denis de Bernardy
嗯,是的,那是预期的结果。你不应该使用类似这样的语句吗:select distinct pm.* from ... - Denis de Bernardy
INNER JOIN 可能会创建仅有一个不同列的唯一行,因此 DISTINCT 可能无法减少结果。 - ERIC

1
SELECT * FROM pos_metrics pm, pos_product_selling pps
Where pm.p_id=pps.p_id AND pm.p_id='0' AND pps.pos_buying_id='0' AND pm.type=1

尝试以上查询


0
阅读这个主题后,我想不到有什么事情发生了。我遇到了同样的问题,并将其锁定到一个表中。
CREATE TABLE `$dbname`.`$table` (
`prtcatid` INT NOT NULL,
`prtcat` VARCHAR(45) NULL,
);

这张表和所有其他表的唯一区别就是没有主键索引。 代码已更改为

CREATE TABLE `$dbname`.`$table` (
`prtcatid` INT NOT NULL,
`prtcat` VARCHAR(45) NULL,
PRIMARY KEY (`prtcatid`)
);

行的加倍随后停止了。这个解决方案是受到上面一个先前答案的建议的推动。 希望这能够帮助其他人。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接