簡體   English   中英

帶有 join 和 where 子句的更新語句

[英]update statement with join and where clause

使用之前代碼中的一些更新和連接語句並嘗試使用 spark sql 語句來獲得相同的結果表 1

insert into tab1
VALUES(1, 'A1', 'B1', 1),
(2, 'A2', 'B2', 0),
(3, 'A3', 'B3',1 ),
(4, 'A4', 'B4',1 ),
(5, 'A5', 'B5',0 ),
(6, 'A6', 'B6',1 )
;

表 2

insert into tab2 
VALUES(1, 'A1', 'B1', 0),
(2, 'A2', 'B2', 1),
(3, 'A3', 'B3', 1),
(6, 'A6', 'B6', 0)
;

更新聲明

update tab1 
set v1 = concat(t1.v1,t2.v1)
from tab1 t1 
inner join tab2 t2 on t1.id =t2.id 
where t2.v3 > 0

結果表1

1   A2A2    B1  1
2   A2A2    B2  0
3   A2A2    B3  1
4   A2A2    B4  1
5   A2A2    B5  0
6   A2A2    B6  1

知道為什么不

1   A1      B1  1
2   A2A2    B2  0
3   A3A3    B3  1
4   A4      B4  1
5   A5      B5  0
6   A6      B6  1

去掉FROM子句中的tab1並改為放置tab2 您可以在WHERE子句中進行連接:

UPDATE tab1 t1
SET v1 = concat(t1.v1,t2.v1)
FROM tab2 t2 
WHERE t1.id =t2.id AND t2.v3 > 0;

演示: db<>fiddle

原來之前的代碼在 MSSQL 上運行,其語法與在 MSSQL 服務器中嘗試后給出的預期結果相同

1   A1      B1  1
2   A2A2    B2  0
3   A3A3    B3  1
4   A4      B4  1
5   A5      B5  0
6   A6      B6  1

在 Postgresql 這個問題的評論中提到的 from_item 不能包含相同的更新表!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM