0

我对这个查询感到绝望。我有两个表 table1 和 table2,表是相同的,但它们有不同的数据。我正在尝试按列代码和制造商删除重复项。为此,我需要来自 table1 的最终结果 ID 来自 table2 的 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。请任何人都可以给我一些提示如何做到这一点?

4

1 回答 1

0

你有两个基本问题:

问题1:
UNION在应该使用的时候使用UNION ALL,因为UNION删除了重复项!

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

 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子句的使用有点奇怪 - 考虑删除它以获取所有制造商的所有重复项。

于 2012-12-08T11:42:19.457 回答