使用SQL比较MS Access中的两个表

时间:2014-06-30 20:14:13

标签: sql ms-access

我尝试使用SQL比较MS Access中的两个表。每个表有两列。 TableA的行数少于TableB,TableA中的所有内容也应该在TableB中。我想通过显示不匹配的行来检查TableA中的行是否与TableB中的相应行相同。

这是我遇到问题的地方。我知道如何比较行,但不知道如何比较列。所以现在如果TableA的column1中的行与TableB中的column1的行匹配,即使TableA的column2中的某些行与TableB中的某些row2行不匹配,我的查询也会显示为空,反之亦然。 / p>

这是我当前的(通用)SQL代码:

SELECT TableA.*
FROM TableA LEFT JOIN TableB ON TableA.column1 = TableB.column1
WHERE TableA.column1 Is Null;

有没有人知道如何修改此代码以正确检查两列?我希望将列视为一个连接实体而不是单独的实体。

谢谢!

编辑:我想出了怎么做。一些答案让我走上了正确的道路,但没有一个是完整的。这就是我最终做的事情。也许它会帮助别人。

SELECT TableA.*
FROM TableA LEFT JOIN TableB ON TableA.column1 = TableB.column1
    AND TableA.column2 = TableB.column2
WHERE TableA.column1 Is Null OR TableA.column2 Is Null;

4 个答案:

答案 0 :(得分:1)

我想你需要这样的东西:

SELECT 'Row only in tableA', TableA.column1, TableA.column2
FROM TableA
LEFT JOIN
TableB ON TableA.column1 = TableB.column1 and TableA.column2 = TableB.column2
WHERE TableA.column1 <> TableB.column1 or TableA.column2 <> TableB.column2
union all
SELECT 'Row only in tableB', TableB.column1, TableB.column2
FROM TableB
LEFT JOIN
TableA ON TableA.column1 = TableB.column1 and TableA.column2 = TableB.column2
WHERE TableA.column1 <> TableB.column1 or TableA.column2 <> TableB.column2;

答案 1 :(得分:0)

有点不清楚,但听起来像你想要的东西:

SELECT TableA.*
FROM TableA LEFT JOIN TableB ON TableA.column1 = TableB.column1
WHERE 
    Tableb.column1 Is Null // not found in Tableb
    OR Tablea.Column2 <> Tableb.Column2  // column2 does not match

答案 2 :(得分:0)

我认为这对你有用。我在防御方面编写了这个代码,因为我不知道你正在使用哪种数据类型。我们尝试做的是从表中的所有列创建一个键,并加入其中。要找出两个表中完全相同的内容:

SELECT TableA.*
FROM TableA INNER JOIN TableB ON CStr(Nz(TableA.column1, "")) & "_" & CStr(Nz(TableA.column2, "")) = CStr(Nz(TableB.column1, "")) & "_" & CStr(Nz(TableB.column2, ""));

找出TableA中缺少的内容:

SELECT TableB.*
FROM TableA RIGHT JOIN TableB ON CStr(Nz(TableA.column1, "")) & "_" & CStr(Nz(TableA.column2, "")) = CStr(Nz(TableB.column1, "")) & "_" & CStr(Nz(TableB.column2, ""))
WHERE TableA.column1 IS NULL;

我们的想法是,我们从所有列创建一个键,这样我们就可以像只有一列的外连接一样工作。

编辑:哎呀,翻了我的Nz和CStr电话。

答案 3 :(得分:0)

SELECT TableA.*
  FROM TableA 
  LEFT JOIN TableB 
    ON TableA.column1 = TableB.column1
   AND TableA.column2 = TableB.column2
WHERE TableA.column1 Is Null;