获取具有相同 ID 和不同 prod_id 的行

Fetch rows with same id and different prod_id

我有两个表:tbltest1 和 tbltest2

我想要两个表的所有 distinct 行,除了 prod_id 中的空行,除非两个表中没有任何行具有相同的 ID 且非空 prod_id

我尝试用所有值创建一个集合,然后 DISTINCTed 只取唯一的值,然后使用 ROWNUMBER() OVER().:

with p as(
select t.*
from tbltest1 as t
union all
select d.*
from tbltest2 as d
),
s as (
select distinct colb, num,
ROW_NUMBER() OVER (PARTITION BY num ORDER BY colb DESC) as rnk
from p
)select *
from s
where rnk = 1

我怎样才能做到这一点?除了这种逻辑,还有其他更有效的方法吗?

对 2 个表使用 UNION 删除重复项(如果有)然后 NOT EXISTS:

WITH cte AS (
  SELECT prod_id, dn FROM tbltest2
  UNION
  SELECT prod_id1, dn1 FROM tbltest1
)
SELECT c1.*
FROM cte c1
WHERE c1.prod_id IS NOT NULL
   OR NOT EXISTS (SELECT 1 FROM cte c2 WHERE c2.dn = c1.dn AND c2.prod_id IS NOT NULL)

参见demo