回答

收藏

使用mysql将丢失的记录从一个表插入到另一个表

技术问答 技术问答 227 人阅读 | 0 人回复 | 2023-09-14

我不知道为什么我对此查询感到困惑。! _% z( U, X2 S
我有两个表:Table A带有900记录和Table B带有800记录。两个表都需要包含相同的数据,但是存在一些不匹配的情况。
" w% j. z; u: q" A; O我需要编写一个mysql查询以插入100从Table A到的丢失记录Table B。" E7 E; P1 n' R4 _# a; e
最后,两者Table A和Table B应该相同。
) B5 s1 X' J, y7 w我不想先截断所有条目,然后再从另一个表中插入。因此,请提供任何帮助。
! ~' B+ z1 T  M* u& h谢谢你。1 a) g* b9 @0 Y: ?! z
                $ r4 z8 q! n& l1 I; h
解决方案:
9 T" U5 Y" [0 Y5 X8 {; i               
) Y$ H2 o) _0 W. v1 ]8 X2 m, A* B' B) j' T6 V2 d9 A! O

5 J0 S4 W! Q8 R0 o0 g5 _' A+ B                也可以使用LEFT OUTER JOIN它。这将避免像John Woo的回答那样避免子查询的开销(当系统可能为外部查询的 每条8 J; @2 R" s! `& J. [
记录执行一次子查询时),并且避免进行不必要的工作来覆盖已经存在的800条记录,例如在user2340435的记录中:7 V* d, r* s$ S) f- T
INSERT INTO b2 g3 \- X' q7 y9 }
SELECT a.* FROM a5 y  h5 V  z0 R2 p
LEFT OUTER JOIN b ON b.id = a.id
- d8 U6 Y( v4 F. a  ^0 n" i& @WHERE b.id IS NULL;
1 P( {6 n: N. m1 O5 _8 l# X这将首先选择A和B表中的所有行,包括两个表中的所有列,但是对于tableA中的B所有列中存在和不存在的行,B它将为NULL。然后,它仅过滤后面的这些行(WHERE
4 J! W" P4 X: }5 Pb.id IS NULL),最后将所有这些行插入到B表中。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则