【问题标题】:Removing duplicate results while using UNION SELECT使用 UNION SELECT 时删除重复结果
【发布时间】:2011-11-30 05:20:27
【问题描述】:

我的 MySQL 查询有问题。

假设我们有两个表:

编号数量

1......1

2......1

3......1

4......3

编号数量

1......2

2......1

6......1

7......2

我真正需要得到的是一个按 id 过滤的结果,所以没有重复的 id。如果它们是两个相同的 id,则仅考虑数量较大的 id。所以在理想情况下,我会得到这个结果:

编号数量

1......2

2......1

3......1

4......3

6......1

7......2

到目前为止,我尝试的是 UNION SELECT,它工作正常,但是当遇到重复的 ID 时,它不会删除重复项,因为它只删除重复的行。 GROUP BY 也没有帮助。我仍然可以通过 PHP 中的数组对其进行排序,但如果可能的话,我希望在 MySQL 级别对其进行排序。

感谢大家的帮助,非常感谢!

【问题讨论】:

    标签: mysql select group-by


    【解决方案1】:

    GROUP BY 也没有帮助

    真的吗?你试过这样吗?

    SELECT id, MAX(qty) AS qty
    FROM
    (
        SELECT id, qty FROM table1
        UNION ALL
        SELECT id, qty FROM table2
    ) T1
    GROUP BY id
    

    【讨论】:

    • 其实我没有。这看起来很有希望;)会试一试。谢谢;)
    • +1:关于效率的小问题:您想使用UNION ALL,因为GROUP BY 无论如何都会汇总所有内容吗?
    • 哇。我每天都学到新东西,这就像一个魅力!我不知道我可以以这种方式使用子查询(我尝试过,但之前没有用,因为我忘记使用别名(在您的示例中为 T1)进行子选择查询;))谢谢伙计!
    • @Ondrej:关于数字 ENUM,请参阅我对 this question 的回答。
    • 啊,好吧,另一个有趣的事情,所以我会去 int 代替。谢谢;)
    【解决方案2】:

    您可以使用 UNION DISTINCT。也许它运行...

    SELECT * FROM t1 WHERE ...
    
    UNION DISTINCT
    
    SELECT * FROM t2 WHERE ...
    

    【讨论】:

    • 注意:DISTINCT 是默认选项,所以一个简单的 UNION 就足够了 :) 见 dev.mysql.com/doc/refman/5.6/en/union.html
    • DISTINCT 是默认选项,因此如果您想检索重复的也可以使用UNION ALL
    猜你喜欢
    • 2018-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    • 2020-07-21
    • 2019-06-19
    • 1970-01-01
    相关资源
    最近更新 更多