2012-12-08 42 views
0

我迫不及待地想要这个查询。我有两个表table1和table2,表是相同的,但他们有不同的数据。我试图删除列代码和制造商的重复。要做到这一点我在最后的结果ID需要从表1 ID从表2还列代码和制造商在使用UNION和GROUP BY时选择两个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 

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

回答

0

你有两个基本问题:

问题1:
您正在使用UNION时,你应该使用UNION ALL,因为UNION删除重复!

问题2:
这不是正确的解决问题的方法。你应该使用简单的加入,而不是联盟。
试试这个:

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子句有点奇怪 - 考虑取消它来获得所有厂商的所有重复。

+0

谢谢,这就是它 –