2011-06-29 128 views
1

我有2个表格A和表格B.在表格B中,我们必须检查输入的所有列是否与表格A完全相同,意思是如果表格B中存在一行,那么同一行将是在表A中也有。表A还可能有不在表B中的行。如果在表A中有一行不在表A中,并且在表B中有一行,则应该显示一个警报,显示表B中哪个元素是额外的。 我们能做到这一点吗?使用连接?如果是的话会是什么sql代码?比较两个表值

回答

13

这是我见过:)

1

你可能想看看下面的文章

SQL SERVER – Introduction to JOINs – Basic of JOINs

这应该给你的JOIN S IN的Sql非常清楚的了解。

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

举个例子,你将不得不看看像

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 
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 
) 

如果所有的查询返回相同的数,那么你可以假定这两个表是完全相等。