iT邦幫忙

0

SQL union問題

如下:
name=new
ID A B C
1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4
5 5 5 5
name=old
ID A B C
1 1 1 1
2 2 2 2
3 3 3 3
執行
select ID,A,B,C from new
union
select ID,A,B,C from old
結果為:
ID A B C
1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4
5 5 5 5
但如果我在Old的資料有做修正後,再執行時卻會把所有資料都當做不一樣的顯示,如下:
name=new
ID A B C
1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4
5 5 5 5
name=old
ID A B C
1 1 1 1
2 3 2 2
3 3 3 3
執行
select ID,A,B,C from new
union
select ID,A,B,C from old
結果為:
ID A B C
1 1 1 1
2 2 2 2
2 3 2 2
3 3 3 3
4 4 4 4
5 5 5 5
ID 2 因內容不一樣..所以兩個都顯示了。
是不是有方法可以保留old的資料,new的資料如有相同的則不新增,不同的則新增。
EX:以ID為判斷,如old ID有相同的不新增,如有old ID沒有的號碼,則新增並連同 A B C都一併新增。
以上問題有點攏長,感謝各位高手耐心看完並給予指教

求關注 iT邦新手 5 級 ‧ 2021-01-27 17:09:27 檢舉
Union ALL
xdxxx iT邦新手 5 級 ‧ 2021-01-28 08:33:47 檢舉
只用 union 會有distinct 的效果 , 你要的應該是 union all
sam22345 iT邦新手 5 級 ‧ 2021-02-01 11:23:44 檢舉
我的是2019 測試過就OK了

1 個回答

1
rogeryao
iT邦大師 3 級 ‧ 2021-01-27 17:47:38
最佳解答
CREATE TABLE new (
ID INT NULL ,
A INT NULL ,
B INT NULL,
C INT NULL);

INSERT INTO new (ID,A,B,C)
VALUES 
(1,1,1,1),
(2,2,2,2),
(3,3,3,3),
(4,4,4,4),
(5,5,5,5);
CREATE TABLE old (
ID INT NULL ,
A INT NULL ,
B INT NULL,
C INT NULL);

INSERT INTO old (ID,A,B,C)
VALUES 
(1,1,1,1),
(2,3,2,2),
(3,3,3,3);
SELECT ID,A,B,C
FROM old
UNION 
SELECT ID,A,B,C
FROM new
WHERE new.ID NOT IN (SELECT old.ID
FROM old) 

Demo

測試失敗呢@@..
https://ithelp.ithome.com.tw/upload/images/20210127/20061369Oal2Nx6aPU.png

rogeryao iT邦大師 3 級 ‧ 2021-01-27 19:05:46 檢舉

可能是 Access 版本的關係吧
Access 2019

https://ithelp.ithome.com.tw/upload/images/20210127/20085021Nxzqwuzjwq.png

https://ithelp.ithome.com.tw/upload/images/20210127/20085021IReHOM8Roc.png

Access 2003

https://ithelp.ithome.com.tw/upload/images/20210127/20085021hz6Vic9d05.png

https://ithelp.ithome.com.tw/upload/images/20210127/20085021S19hl7hCFa.png

嗯~有可能~我的是Access2007去測試的~

我要發表回答

立即登入回答