如何解决联合所有但只保留 T-SQL 中一张表中的重复项
我有两张桌子想要合并。我只需要保留两个表之一的重复项。我试图找到它,但在任何地方都找不到。希望有人能帮忙。
例如: 表_1:
ID | 产品 | 金额 |
---|---|---|
1 | A | 10 |
2 | B | 10 |
3 | C | 10 |
表_2:
ID | 产品 | 金额 |
---|---|---|
3 | C | 9 |
4 | A | 100 |
5 | B | 100 |
想要的结果:
ID | 产品 | 金额 |
---|---|---|
1 | A | 10 |
2 | B | 10 |
3 | C | 9 |
4 | A | 100 |
5 | B | 100 |
所以总是使用 table_2 中的重复项。在此示例中,ID 3 是重复的,因此使用数量为 9 的 table_2 的副本。
Select * from Table_1 where Table_1.id != Table_2.id
Union All
Select * from Table_2
但后来我收到错误: '无法绑定多部分标识符“Table_2.ID”。'
解决方法
使用not exists
:
Select t1.*
from Table_1 t1
where not exists (select 1 from table_2 t2 where t2.id = t1.id)
Union All
Select t2.*
from Table_2 t2;
,
我假设您想要的是 Icon(Icons.icon)
:
EXISTS
但是,如果 SELECT T1.ID,T1.Product,T1.Amount
FROM dbo.Table1 T1
WHERE NOT EXISTS (SELECT 1
FROM dbo.Table2 T2
WHERE T1.ID = T2.ID)
UNION ALL
SELECT T2.ID,T2.Product,T2.Amount
FROM dbo.Table2 T2;
在两个表中都是唯一的,则 FULL OUTER JOIN
也可能有效:
ID
,
试试这个:
SELECT T1.*
FROM @Table1 T1
WHERE T1.ID NOT IN (SELECT ID FROM @Table2)
UNION
SELECT T2.*
FROM @Table2 T2
,
Union 会给你结果。 Union 将始终返回唯一值。如果您使用 union all,您将获得所有重复项。您的答案是使用 union all。
SELECT
B.ID,B.Product,B.Amount
FROM
(
SELECT
A.ID,A.Product,A.Amount,ROW_NUMBER() over (Partition BY ID,Product order by Amount ASC) AS [row_num]
FROM
(
SELECT
tb_1.*
FROM tb_1
UNION ALL
SELECT
tb_2.*
FROM tb_2
) AS A
) AS B
WHERE B.[row_num] = 1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。