是否可以 UNION 不同的行但忽略一列来确定唯一性?

Is it possible to UNION distinct rows but disregard one column to determine uniqueness?

select d.id, d.registration_number
from DOCUMENTS d

union

select dd.id, dd.registration_number
from DIFFERENT_DOCUMENTS dd

是否可以仅根据 registration_number 的唯一性合并这些结果,而不考虑文档的 id

或者,是否有可能以不同的方式实现相同的结果?

补充一下:实际上我合并了 5 个查询,每个大约 20 行,有 4 列在确定唯一性时应该被忽略。

Union 将检查所有列的组合的唯一性。但是,您可以使用 union all(不会删除重复项),然后使用 row_number window 函数自己应用逻辑:

SELECT id, registration_number
FROM   (SELECT id, registration_number, 
               ROW_NUMBER() OVER (PARTITION BY registration_number ORDER BY id) AS rn
        FROM   (SELECT id, registration_number
                FROM   documents 
                UNION ALL
                SELECT id, registration_number
                FROM   different_documents) u
       ) r
WHERE  rn = 1

您基本上需要用其他东西包装合并的数据,以便只获得您想要的数据。

SELECT min(id), registration_number
FROM   (SELECT id, registration_number
        FROM   documents 
        UNION ALL
        SELECT id, registration_number
        FROM   different_documents) 
GROUP BY registration_number

既然其他答案已经正确,请问为什么您需要检索该查询中的其他列,因为主要目的似乎是收集唯一的注册号?

先收集唯一的注册号,然后检索其他信息不是更简单吗?

或者在您的实际查询中,首先收集没有应忽略的列的信息,然后在需要时收集这些列中的信息?

喜欢,例如,用

制作一个视图
SELECT d.registration_number
  FROM DOCUMENT d
 UNION
SELECT dd.registration_number
  FROM DIFFERENT_DOCUMENT dd

然后使用该视图和 JOINS 收集信息?

假设 registration_number 在每个 table 中都是唯一的,您可以使用 not exists:

select d.id, d.registration_number
from DOCUMENTS d
union all
select dd.id, dd.registration_number
from DIFFERENT_DOCUMENTS dd
where not exists (select 1
                  from DOCUMENTS d
                  where dd.registration_number = d.registration_number
                 );