阿晨1998
2019-07-30 16:18:40
使用相同的用戶名更新另一個(gè)表中的表值我有兩個(gè)表,名稱(chēng)相同的列user_name,說(shuō)table_a,table_b。我想,從復(fù)制table_b,column_b_1,column_b2,以table_b1,column_a_1,column_a_2,分別,這里的user_name是一樣的,如何做到這一點(diǎn)的SQL語(yǔ)句?
3 回答

慕田峪7331174
TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超13個(gè)贊
只要你有適當(dāng)?shù)乃饕@應(yīng)該是正常的:
UPDATE table_aSET column_a_1 = (SELECT table_b.column_b_1 FROM table_b WHERE table_b.user_name = table_a.user_name ) , column_a_2 = (SELECT table_b.column_b_2 FROM table_b WHERE table_b.user_name = table_a.user_name )WHERE EXISTS ( SELECT * FROM table_b WHERE table_b.user_name = table_a.user_name )
sqlite3中的UPDATE 不支持FROM子句,這使得它比其他RDBMS更多的工作。
如果性能不令人滿意,另一個(gè)選項(xiàng)可能是使用select和table_a連接到table_a為臨時(shí)表建立新行。然后從table_a中刪除數(shù)據(jù)并從臨時(shí)值中重新填充。

揚(yáng)帆大魚(yú)
TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超9個(gè)贊
從sqlite 3.15版開(kāi)始,UPDATE的語(yǔ)法在SET部分中允許列名列表,因此查詢可以寫(xiě)為
UPDATE table_aSET (column_a_1, column_a_2) = (SELECT table_b.column_b_1, table_b.column_b_2 FROM table_b WHERE table_b.user_name = table_a.user_name )WHERE EXISTS ( SELECT * FROM table_b WHERE table_b.user_name = table_a.user_name )
這不僅更短,而且更快

萬(wàn)千封印
TA貢獻(xiàn)1891條經(jīng)驗(yàn) 獲得超3個(gè)贊
從另一個(gè)表更新一個(gè)表有一個(gè)更好的解決方案:
;WITH a AS( SELECT song_id, artist_id FROM online_performance)UPDATE record_performanceSET op_song_id=(SELECT song_id FROM a), op_artist_id=(SELECT artist_id FROM a);
添加回答
舉報(bào)
0/150
提交
取消