使用mysql在临时表中显示每个组的重复项

Posted

技术标签:

【中文标题】使用mysql在临时表中显示每个组的重复项【英文标题】:show duplicates from each group in temporary table using mysql 【发布时间】:2013-09-26 12:30:54 【问题描述】:

有人可以帮助我使用 mysql 查询以使用 mysql 在临时表中显示每个组的重复项

sqlfiddle http://sqlfiddle.com/#!2/d8c9c/17

表格

TOWN    ID1
town1   1
town1   1
town1   4
town2   1
town2   5
town2   8
town3   1
town3   3
town3   3

要求的结果

TOWN    ID1
town1   1
town1   1
town3   3
town3   3

我已尝试 SELECT * FROM Table1 group by TOWN,ID1 但这会删除重复项并显示非重复记录

【问题讨论】:

GROUP BY ... WHERE COUNT > 1 请编辑问题以包括您已经尝试过的查询、他们给您的输出以及与您的预期输出有何不同。 @EricHotinger 你能输入完整的查询吗? @Clive 查看更新的问题和 sql fiddle @SantoshPillai - 当然,完成。 【参考方案1】:

这是您要查找的查询

SELECT TOWN, ID1  FROM Table1 t WHERE ( SELECT COUNT(*) FROM Table1 WHERE TOWN = t.TOWN AND ID1 = t.ID1 ) > 1;

【讨论】:

您的查询在 sqlfiddle 上运行良好,但是当我在临时表的实际数据上运行它时,我收到错误 #1137 - 无法重新打开表:'t' 在 mysql 的时态表上执行的查询中,您似乎可以引用同一个表两次。 你的意思是不能引用同一张表两次? dev.mysql.com/doc/refman/5.0/en/temporary-table-problems.html 我想不出在不引用同一个表两次的情况下进行查询的方法。也许您应该改用常规表格... 我的临时表是两个表的连接。您知道如何在查询中进行左连接吗?【参考方案2】:
SELECT a.TOWN, a.ID1 FROM Table1 a JOIN
  (SELECT TOWN, ID1 FROM Table1 GROUP BY TOWN, ID1 HAVING COUNT(*) > 1) b 
ON a.TOWN = b.TOWN
AND a.ID1 = b.ID1

【讨论】:

以上是关于使用mysql在临时表中显示每个组的重复项的主要内容,如果未能解决你的问题,请参考以下文章

MySQL - 查询临时表以从表中检索 2 行

Mysql 临时表 视图

mysql创建临时表,将查询结果插入已有表中

从没有主键的临时表中删除重复字段 [重复]

mysql数据库怎么把查询出来的数据生成临时表

防止 SQL 表中的重复值