我有2个表A和表B.在表B中,我们必须检查输入的所有列是否与表A中的完全相同,表示如果表B中存在一行,那么表A中的那一行将在那里太。表A也可能有不在表B中的行。如果有一行不在表A中并且在表B中,则应显示一个警告,显示表B中哪个元素是额外的。 我们可以使用加入吗?如果是这样,sql代码是什么?
答案 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
)
如果所有查询都返回相同的计数,那么您可以假设两个表完全相同。