gpt4 book ai didi

sql - 如何比较两个相同表中的行并返回缺失行的结果集?

转载 作者:可可西里 更新时间:2023-11-01 07:17:14 25 4
gpt4 key购买 nike

我查看了所有相关问题,但没有一个能完全满足我的需要。我有两个结构相同的表(id、VoucherNbr、BalanceInit)——一个来 self 们当前的生产系统(tableA),另一个来自客户的遗留系统(tableB)。表A有记录a,b,c,d,e(举例),表B有a,b,c,d,e,f,g。表 B 将始终具有表 A 中存在的所有值,但也有额外的行。我需要返回一个结果集,其中包含表 B 中不存在于表 A 中的所有行(f 和 g,使用该示例。)我该怎么做?

编辑:

表A

ID | VoucherNbr         | BalanceInit
=============================================
1 | 1111111111111111 | 25.00
2 | 2222222222222222 | 50.00
3 | 3333333333333333 | 10.00

表B

ID | VoucherNbr         | BalanceInit
=============================================
15 | 1111111111111111 | 25.00
17 | 1212121212121212 | 15.00
22 | 2222222222222222 | 50.00
34 | 3333333333333333 | 25.00
41 | 3232323232323232 | 75.00

我需要取回的结果集只包含表 A 中不存在的行,其中不存在的 VoucherNbr 字段中的值不存在,而不是 ID 字段中的值。

ID | VoucherNbr         | BalanceInit
=============================================
17 | 1212121212121212 | 15.00
41 | 3232323232323232 | 75.00

最佳答案

一些数据库直接使用 SUBTRACT 或 MINUS 操作提供此功能。 MySQL好像没有这样的操作。

我可能会这样做:

SELECT  B.id, B.voucherNbr, B.balanceInit FROM tableB B
WHERE NOT EXISTS
(SELECT * FROM tableA A
WHERE A.voucherNbr = B.voucherNbr AND A.balanceInit = B.balanceInit)

但是,这里有一些其他的 MySQL 解决方案(我用谷歌搜索了它们),您可以测试速度:

SELECT  id, voucherNbr, balanceInit FROM tableB 
WHERE (voucherNbr, balanceInit) NOT IN
(SELECT voucherNbr, balanceInit FROM tableA);

SELECT id, voucherNbr, balanceInit
FROM tableB LEFT JOIN tableA USING (voucherNbr, balanceInit)
WHERE tableA.voucherNbr IS NULL

老实说,如果执行时间相似或更好,我更喜欢第一个谷歌搜索的解决方案。

注意:我已经从我的原始答案中修改了这些,以反射(reflect)您在对另一个答案的评论中声明两个表中的 ID 不同这一事实。

关于sql - 如何比较两个相同表中的行并返回缺失行的结果集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3974201/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com