使用UNION和GROUP BY时,请同时选择两个ID列

时间:2012-12-08 11:26:27

标签: mysql

我对此查询感到绝望。我有两个表table1和table2,表是相同的但它们有不同的数据。我正在尝试通过列代码和制造商删除重复项。为此,我需要来自table2的table1 ID的最终结果ID以及列代码和制造商

 SELECT * FROM ( 
      SELECT id,code,manufacturer FROM table1 WHERE manufacturer = 1 
      UNION SELECT id,code,manufacturer FROM table2 WHERE manufacturer = 1
 ) AS t GROUP BY code HAVING COUNT(*) > 1

但是在结果中我只获得了table1的值。没关系,但我只需要从table2获取id。请任何人都可以给我一些提示如何做到这一点?

1 个答案:

答案 0 :(得分:0)

您有两个基本问题:

问题1:
当您使用UNION时,您正在使用UNION ALL,因为UNION会删除重复内容!

问题2:
这不是解决问题的正确方法。您应该使用简单的 join ,而不是工会 试试这个:

 SELECT
     t1.id as table1_id,
     t2.id as table2_id,
     t1.code,
     t1.manufacturer
 FROM table1 t1
 JOIN table2 t2 
     ON t2.code = t1.code
     AND t2.manufacturer = t1.manufacturer
 WHERE manufacturer = 1 -- this WHERE clause is optional

您对WHERE子句的使用有点奇怪 - 考虑将其删除以获取所有制造商的所有重复项。