【问题标题】:Mysql join gives duplicate rowsMysql join给出重复的行
【发布时间】: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 时,我没有得到重复,但第二个表中的值重复了。还有其他解决方案吗?

【问题讨论】:

    标签: mysql join left-join


    【解决方案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 可能不会减少结果。
        猜你喜欢
        • 1970-01-01
        • 2021-02-05
        • 1970-01-01
        • 2018-12-15
        • 2012-08-12
        • 2018-06-07
        • 2012-02-20
        • 1970-01-01
        相关资源
        最近更新 更多