如何通过比较另一个表来显示剩余数据

时间:2018-05-16 11:46:58

标签: c# asp.net sql-server

Table 1: ABC                              table 2: PQR

code|Name|Amount                           code|Name|Amount
----+----+-----                            ----+----+------
1   | A  | 1000                             1  | A  | 1000
2   | B  | 2000                             2  | B  | 2000
3   | C  | 4000
4   | D  | 1000

表2中的数据是基于表1的数据插入,现在通过按下名为“Remaining”的按钮我想显示表2中不存在的数据,以了解我错过了从表1填写的元组我怎么能这样做?

2 个答案:

答案 0 :(得分:3)

此答案假定您要查找第一个表中第二个表中尚未存在的所有记录。一个选项使用左连接:

SELECT t1.*
FROM ABC t1
LEFT JOIN PQR t2
    ON t1.code = t2.code AND t1.Name = t2.Name AND t1.Amount = t2.Amount
WHERE t2.code IS NULL;

我们也可以使用EXISTS

来表达这一点
SELECT t1.*
FROM ABC t1
WHERE NOT EXISTS (SELECT 1 FROM PQR t2
                  WHERE t1.code = t2.code AND t1.Name = t2.Name AND
                        t1.Amount = t2.Amount);

答案 1 :(得分:3)

如果2个表中的字段完全相同且顺序相同?
但是你可以把这些字段放在SQL中吗? 然后你也可以使用EXCEPT

SELECT * FROM ABC
EXCEPT
SELECT * FROM PQR;

如果您不确定这些字段的顺序是否相同? 然后在SQL中列出它们 这样做的好处是,当其中一个表被更改时,SQL可能仍然可以工作。

SELECT [code], [Name], [Amount] from ABC
EXCEPT
SELECT [code], [Name], [Amount] FROM PQR;

它过滤掉与ABC中的PQR记录完全相同的PQR记录。

但通常情况下,Tim Biegeleisen所展示的方法更常用。