比较两个表值

时间:2011-06-29 05:25:49

标签: sql join

我有2个表A和表B.在表B中,我们必须检查输入的所有列是否与表A中的完全相同,表示如果表B中存在一行,那么表A中的那一行将在那里太。表A也可能有不在表B中的行。如果有一行不在表A中并且在表B中,则应显示一个警告,显示表B中哪个元素是额外的。 我们可以使用加入吗?如果是这样,sql代码是什么?

3 个答案:

答案 0 :(得分:14)

这是关于我见过的连接的最佳图片:)

答案 1 :(得分:1)

您可能希望查看以下文章

SQL SERVER – Introduction to JOINs – Basic of JOINs

这应该让您非常清楚地了解Sql中的JOIN

从那里你应该能够找到解决方案。

例如,您必须查看类似

的内容
TABLE1
    Col1
    Col2
    Col3
    Col4

TABLE2
    Col1
    Col2
    Col3
    Col4

--all rows that match
SELECT  *
FROM    TABLE1 t1 INNER JOIN
        TABLE2 t2   ON  t1.Col1 = t2.Col1
                    AND t1.Col2 = t2.Col2
                    ...
                    AND t1.Col3 = t2.Col3

--rows only in TABLE1
SELECT  *
FROM    TABLE1 t1 LEFT JOIN
        TABLE2 t2   ON  t1.Col1 = t2.Col1
                    AND t1.Col2 = t2.Col2
                    ...
                    AND t1.Col3 = t2.Col3
WHERE   t2.Col1 IS NULL

--rows only in TABLE2
SELECT  *
FROM    TABLE1 t2 LEFT JOIN
        TABLE2 t1   ON  t1.Col1 = t2.Col1
                    AND t1.Col2 = t2.Col2
                    ...
                    AND t1.Col3 = t2.Col3
WHERE   t1.Col1 IS NULL

答案 2 :(得分:0)

如果您想基于单个列进行比较,那么您可以执行以下操作:

SELECT ID FROM B LEFT JOIN A ON B.ID = A.ID WHERE A.ID IS NULL;

上述查询将为您提供A中但不存在于B中的记录列表。

相反,如果您想比较整行,可以使用以下方法:

SELECT COUNT(*) FROM B;

SELECT COUNT(*) FROM A;

SELECT COUNT(*) FROM (
  SELECT * FROM B UNION SELECT * FROM A
)

如果所有查询都返回相同的计数,那么您可以假设两个表完全相同。