Mysql join给出重复的行

Posted

技术标签:

【中文标题】Mysql join给出重复的行【英文标题】:Mysql join gives duplicate rows 【发布时间】:2011-09-15 04:45:23 【问题描述】:

我有 2 个表,我正在使用 join 从这 2 个表中获取公共记录。我使用了以下查询,但我的问题是我的记录翻了一番。查询如下

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_sales 表:

输出:

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

【问题讨论】:

【参考方案1】:

读完这个主题后,我想不出有什么事情发生了。我有同样的问题,并把它钉在一张桌子上

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`)
);

然后行的加倍停止。该解决方案是由上述先前答案中的建议提示的。 希望这对其他人有帮助。

【讨论】:

【参考方案2】:

试试这些

GROUP BY pos_product_selling.metrics

【讨论】:

你能评论你的答案吗? 答案很简单,但没有显示大声笑,谢谢 Jayak ;)【参考方案3】:

pos_metrics表中添加一个主键并将其引入pos_product_selling表,然后根据主键以及其他条件做一个JOIN。你不会得到这些重复的。

您在这里有重复的原因是因为不可能基于一个值对两个表进行唯一比较。

【讨论】:

“并介绍给pos_product_selling表”是什么意思 @Ricky B 他的意思是在 pos_product_sales 表上创建一个列,其值是 pos_metrics 上的主键。这种列的典型名称是“pos_metrics_id”【参考方案4】:

试试这个:

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

【讨论】:

这是可行的,但这是正确的做法吗??我在这里处理数千条记录..【参考方案5】:
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

试试上面的查询

【讨论】:

【参考方案6】:

要消除重复,请使用 distinct:

select distinct * from ...

但我感觉您的问题与其他问题有关 - 您需要发布特定代码以获得更多帮助。

【讨论】:

我的感觉是你需要一个小组/在某个地方,但你的问题缺乏背景。 嗯,是的,这就是预期的结果。你不应该使用类似的东西:select distinct pm.* from ... INNER JOIN 可以创建只有一个不同列的唯一行,因此 distinct 可能不会减少结果。

以上是关于Mysql join给出重复的行的主要内容,如果未能解决你的问题,请参考以下文章

想要使用外键关系获取laravel中当前登录用户的数据但给出重复的行

SQL LEFT JOIN 不重复相同的行值

在保存之前解析重复的行保存之后

带有php数组的Mysql SELECT语句[重复]

带有php数组的Mysql SELECT语句[重复]

mySQL JOIN 用法 [重复]