【问题标题】:selecting duplicate IDs in mysql在mysql中选择重复的ID
【发布时间】:2011-09-07 10:40:13
【问题描述】:

我有一个非常简单的表,只有 part_id 和 part_type:

CREATE TABLE `temp` (
`part_id` INT NOT NULL ,
`part_type` CHAR( 5 ) NOT NULL

这有很长的零件 ID 和类型列表。但是,有些零件有不止一种类型。我将如何获得具有不止一种类型的部件的 ID?我在想这样的事情会起作用:

SELECT * FROM temp WHERE part_in IN (SELECT count(part_id) as duplicates FROM temp WHERE 1 GROUP BY part_id) AND duplicates > 1

但是,这显然只是伪代码并且失败了。感谢您的帮助。

【问题讨论】:

    标签: mysql sql duplicates


    【解决方案1】:
    select part_id from temp
    group by part_id
    having count(*) > 1
    

    这将为您提供多行的 part_id。然后,您可以像您的示例查询一样包装它,以获取所有多行部分的所有 part_id/part_type 数据。

    select * from temp
    where part_id in (select part_id from temp
                      group by part_id
                      having count(*) > 1)
    order by part_id
    

    【讨论】:

    • 另外:如果您也对计数值感兴趣(数据库几乎是免费的),您可以将 select 修改为以下内容: select part_id, count(*) as mycount from temp ...
    【解决方案2】:

    我喜欢 GROUP_CONCAT 的这些东西,因为它为您提供了这个问题(多少)和下一个问题(哪些类型)的答案。

    select part_type, count(*), group_concat(part_id)
    from temp
    group by 1
    having count(*) > 1;
    

    【讨论】:

    • 这提供了一组与 OP 要求的数据不同的数据,但是是的,这是一个 imp 查询,用于查找与一个查询连接在一行中的重复项!
    • 什么是GROUP BY 1
    • “group by 1”是第一个字段的快捷方式,因此在这种情况下与“group by part_type”相同。
    【解决方案3】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-12
      • 1970-01-01
      • 2014-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多