比较2个表并返回完整数据

时间:2016-05-31 14:12:39

标签: sql ms-access union

我正在努力编写查询,并且事实上不知道哪个查询与任务相关(联盟,内部/外部联接等)

我有一个每周修订的数据表,我需要报告差异。

,即如果它在表1中删除,则表2或字段会更改。

我已经包含了一张图片来显示修改后的表中的数据,以及我想要作为报告输出的内容(忽略评论,它们仅供参考)

任何帮助都将不胜感激。

enter image description here

2 个答案:

答案 0 :(得分:0)

FULL OUTER JOIN要查找表1或表2中的任何行并尽可能对齐它们,然后您可以使用CASE根据AREA的比较创建评论列,或者NAME为空。

但MS ACCESS没有FULL JOIN所以我们需要LEFT JOIN UNION RIGHT JOIN 同样CASE语句是VB语法,使用switch

SELECT
  t1.*,
  t2.*,
  switch(
    t2.name IS NULL,'IN TABLE 1 ONLY',
    t1.area <> t2.area,'IN TABLE 1 AND 2 SAME NAME BUT AREA DIFFERENT IN TABLE 2',
    true,'IN TABLE 1 AND 2 AND EQUAL')
FROM table1 AS t1
LEFT JOIN table2 AS t2
ON t1.name = t2.name
UNION
SELECT
  t1.*,
  t2.*,
  switch(
    t1.name IS NULL,'IN TABLE 2 ONLY, OMITTED IN TABLE 1',
    t1.area <> t2.area,'IN TABLE 1 AND 2 SAME NAME BUT AREA DIFFERENT IN TABLE 2',
    true,'IN TABLE 1 AND 2 AND EQUAL')
FROM table1 AS t1
RIGHT JOIN table2 AS t2
ON t1.name = t2.name

答案 1 :(得分:0)

我不相信访问支持完全外连接......

所以......我们使用左连接和右连接以及一个联合以及一个case语句。

// Bind your Machines to your DropDownList
MachinesDropDown.DataSource = GetMachineInfo(xDoc, 2);
// Set your text / value properties
MachinesDropDown.DataTextField = "snsrN";
MachinesDropDown.DataValueField = "orignalPathId";
// Actually bind the contents to be reflected in the UI
MachinesDropDown.DataBind();