我在这里的第一篇文章,并寻求一些帮助,如何比较2个表中的值,并带回差异列表
这是通过VBA在excel中完成的,我尝试了几种不同的方式,如Full join和Union,但无法让它运行。
基本情景是:
Table A has 2 columns,
Column 1 = ID
Column 2 = Qty
表B中完全相同的设置
我想要做的是收集一个数据列表,其中数量不同或不会出现在任何一个表格中
e.g。
Table A has
ID 1
Qty 3
Table B has
ID 1
Qty 2
所以它会带回一条记录
或者
Table A has ID 5 and Table B doesn't
Table B has ID 7 and Table A doesn't
不确定最好的方法,我知道我可以通过公式在excel中完成,但如果可能的话,尝试在SQL中完成
由于
答案 0 :(得分:1)
从SQL的角度来看,您将看到两个不同的陈述:
这看起来像是:
SELECT tableA.id, tableA.qty FROM tableA LEFT JOIN tableB on tableA.id = tableB.id and tableA.qty = tableB.qty WHERE tableB.qty IS NULL
SELECT tableB.id, tableB.qty FROM tableB LEFT JOIN tableA on tableBid = tableA.id and tableB.qty = tableA.qty WHERE tableA.qty IS NULL
您可以将这两者结合在一起,以获得不匹配记录的单一陈述,如下所示:
SELECT tableA.id, tableA.qty FROM tableA LEFT JOIN tableB on tableA.id = tableB.id and tableA.qty = tableB.qty WHERE tableB.qty IS NULL
UNION ALL
SELECT tableB.id, tableB.qty FROM tableB LEFT JOIN tableA on tableBid = tableA.id and tableB.qty = tableA.qty WHERE tableA.qty IS NULL
您可以为每个单独的SQL语句添加一个原因,以便了解错配发生的原因:
SELECT tableA.id,
tableA.qty,
"Item in Table A, but not Table B" as Reason
FROM tableA
LEFT JOIN tableB
ON tableA.id = tableB.id
AND tableA.qty = tableB.qty
WHERE tableB.qty IS NULL
UNION ALL
SELECT tableB.id,
tableB.qty,
"Item in Table B, but not Table A" as Reason
FROM tableB
LEFT JOIN tableA
ON tableBid = tableA.id
AND tableB.qty = tableA.qty
WHERE tableA.qty IS NULL