回答

收藏

使用相同的用户名更新另一个表中的表值

技术问答 技术问答 75 人阅读 | 0 人回复 | 2023-09-13

我有两个表,一个名为同一列中user_name,他说table_a,table_b。
! L0 V, K& e, e+ ^5 _1 p+ |我想,从复制table_b,column_b_1,column_b2,以table_b1,column_a_1,column_a_2,分别,这里的user_name是一样的,如何做到这一点的SQL语句?
' K8 ^% i2 _; Q( Y8 j' f                " a% O' G& d' I5 y- M
解决方案:
8 H: @  a! \, j/ r/ _: A" x                2 y7 C: f3 K- W" E' ]) _7 f/ S

# |3 ?# F6 T9 ]$ Q. g( i" L5 t3 d. w2 v' u1 k1 ]% m
                只要您有合适的索引,它就可以正常工作:
' Y0 K& V" ]/ f% L8 Z9 cUPDATE table_a
3 O! o4 T. ^3 O/ x! ?9 y8 PSET
$ X; }# K8 [. P4 C      column_a_1 = (SELECT table_b.column_b_1 ( d7 i$ D" k8 l# g. t: i" z& M
                            FROM table_b0 _9 e' r: q+ T6 Y7 T9 |8 }0 q) {
                            WHERE table_b.user_name = table_a.user_name ); I9 ~/ g; e% F& ?( l3 M. v& Z
    , column_a_2 = (SELECT table_b.column_b_2
# J6 W3 f" s6 s% D1 ~% ~                            FROM table_b7 R, M) {& i1 I% F
                            WHERE table_b.user_name = table_a.user_name )
3 S1 @, T+ W, W- m. h2 X& oWHERE
2 h3 ~* ~% m4 T0 o# t2 m! p. k    EXISTS (" Y# T, H) g6 z% f9 [1 d! K
        SELECT *
- b1 l7 }& v+ \, M, N        FROM table_b
( h4 ~( }% x1 @! N  k6 a; V        WHERE table_b.user_name = table_a.user_name7 e) g5 u* L$ c& K
    )
- v8 n& n+ W- Z. n- j1 fsqlite3中的UPDATE不支持FROM子句,这使它比其他RDBMS的工作量更多。2 k% x4 @3 Y- }7 g
如果性能不令人满意,则另一个选择可能是使用select为table_a建立新行,并与table_a联接到临时表中。然后从table_a中删除数据,并从临时表中重新填充。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则