获取具有相同 ID 和不同 prod_id 的行
Fetch rows with same id and different prod_id
我有两个表:tbltest1 和 tbltest2
我想要两个表的所有 distinct
行,除了 prod_id 中的空行,除非两个表中没有任何行具有相同的 ID 且非空 prod_id
我尝试用所有值创建一个集合,然后 DISTINCT
ed 只取唯一的值,然后使用 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。
我有两个表:tbltest1 和 tbltest2
我想要两个表的所有 distinct
行,除了 prod_id 中的空行,除非两个表中没有任何行具有相同的 ID 且非空 prod_id
我尝试用所有值创建一个集合,然后 DISTINCT
ed 只取唯一的值,然后使用 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。