Sql Union 2选择基于某些列(而不是整行)删除重复项

Sql Union 2选择基于某些列(而不是整行)删除重复项,sql,sql-server,Sql,Sql Server,我想合并两个select语句,结果将是不同的记录,但是我想在第二个select语句中省略重复的结果(考虑到某些列) 我想到了这一点(未经测试): 但它似乎不正确,有没有更好的方法从第二次选择中排除重复 编辑: 每个项目都可以有附加组件。和附加组件以两种方式创建: 1.表1中专门创建的附加组件 2.公开定义x类型的项必须具有附加组件 首先选择获取专门为项目创建的加载项列表,表2为所有项目创建加载项列表现在如果有专门为项目创建的加载项,将有一个重复的加载项 试试看 select * from tab

我想合并两个select语句,结果将是不同的记录,但是我想在第二个select语句中省略重复的结果(考虑到某些列)

我想到了这一点(未经测试):

但它似乎不正确,有没有更好的方法从第二次选择中排除重复

编辑:

每个项目都可以有附加组件。和附加组件以两种方式创建:

1.表1中专门创建的附加组件

2.公开定义x类型的项必须具有附加组件

首先选择获取专门为项目创建的加载项列表,表2为所有项目创建加载项列表现在如果有专门为项目创建的加载项,将有一个重复的加载项

试试看

select * from table1
union
select * from table2
where not exists(select 1 from table1 
                 where table2.parent = table1.parent 
                 and table2.type = table1.type)
试试这个:

;WITH cte AS (
   SELECT *, 1 AS SetID FROM table1 WHERE [Type] = 1
   UNION ALL
   SELECT *, 2 AS SetID FROM table2 
)

,cte2 as (
   SELECT *,
   RANK() OVER (PARTITION BY [Type], [Parent] ORDER BY SetID) FROM cte) rk
   FROM cte
)

SELECT * FROM cte2 WHERE rk = 1 

您能否提供一些示例数据
UNION
是否删除重复项<代码>联合所有< /代码>是保持重复的方式。@强尼,正如我在问题中所说的,它们不是完全重复的,但我认为具有相同的父类型和副本(虽然它们可能有不同的ID),但如果您能解释它是什么,那就更好了。
select * from table1
union
select * from table2
where not exists(select 1 from table1 
                 where table2.parent = table1.parent 
                 and table2.type = table1.type)
;WITH cte AS (
   SELECT *, 1 AS SetID FROM table1 WHERE [Type] = 1
   UNION ALL
   SELECT *, 2 AS SetID FROM table2 
)

,cte2 as (
   SELECT *,
   RANK() OVER (PARTITION BY [Type], [Parent] ORDER BY SetID) FROM cte) rk
   FROM cte
)

SELECT * FROM cte2 WHERE rk = 1