【问题标题】:how to remove duplicate values of two different tables with only two columns in common?如何删除只有两列共有的两个不同表的重复值?
【发布时间】:2021-01-04 02:05:40
【问题描述】:

我有两个表,只有两列共有,我想相互比较并删除公共列的重复项

例如表 A 有 4 列,表 B 有 6 列,我想获取表 A 的记录,但没有行匹配的记录(当两个公共列的值匹配时)

例如,在表 A 的常见两列中有 code=x , Nature =y ,在表 B 中也有 code=x , Nature =y ,所以当我获取表 A 记录时应该删除这条记录...我正在使用 Visual Studio C#,但我不知道要执行什么查询来获取这些记录,请提供任何帮助

【问题讨论】:

  • 请提供样本数据、所需结果和适当的数据库标签。
  • 请注意不要滥用标签。 [visual-studio] 标记仅用于有关 Visual Studio 应用程序的问题,而不是您碰巧用它编写的代码。

标签: c# sql database


【解决方案1】:

一些方法(我在这里假设 SQL Server,因为您使用的是 VS 和 C#):

使用 EXCEPT (https://docs.microsoft.com/en-us/sql/t-sql/language-elements/set-operators-except-and-intersect-transact-sql?view=sql-server-ver15#examples)

SELECT
   a.Code,
   a.Nature
FROM dbo.TableA a

EXCEPT

SELECT 
   b.Code,
   b.Nature
FROM dbo.TableB b

或者,您可以在结果为 NULL 的情况下 LEFT JOIN TableB:

SELECT a.*
FROM dbo.TableA a
LEFT JOIN dbo.TableB b
   ON b.Code = a.Code
   AND b.Nature = a.Nature
WHERE b.Code IS NULL;

【讨论】:

  • 这些处理空值的方式不同。 EXCEPT 将认为空值彼此相等,= 不会。 NOT EXISTS 也是另一种方法。
  • 谢谢你的回答,NOT EXISTS 是我要找的那个
【解决方案2】:

您正在搜索 NOT IN 运算符:

select table_a.* 
from table_a
where table_a.code NOT IN (select code from table_b)

您可以使用以下代码测试here 以创建和填充表格:

create table table_a (code int, Nature int)
create table table_b (code int, Nature int)

insert into table_a values (1, 10)
insert into table_a values (2, 20)
insert into table_a values (3, 30)

insert into table_b values (2, 20)
insert into table_b values (4, 40)

【讨论】:

  • 如果code 可以为空,这可能会返回不正确的结果
猜你喜欢
  • 1970-01-01
  • 2021-08-09
  • 2018-11-23
  • 1970-01-01
  • 1970-01-01
  • 2013-10-10
  • 2022-08-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多