匹配两个数据库并将相同的行插入另一个

时间:2012-08-03 17:04:18

标签: mysql sql database merge

我有两个名为DB1和DB2的数据库,其中有一个名为movies的表。 movie包含movie_nameyearsynopsisAKA等。您可以看到synopsisAKA列为空。我想匹配两列(movie_nameyear)并将相同的结果插入到DB1的空列中。

DB1.movi​​es

movie_name | year | synopsis | AKA
----------------------------------------
titanic    | 1997 |          |
matrix     | 1999 |          |
alien      | 1979 |          |

DB2.movi​​es

movie_name | year | synopsis | AKA
----------------------------------------
titanic    | 1997 | xxxxxxx  | XXX
matrix     | 1999 | yyyyyyy  | YYY
alien      | 1979 | zzzzzzz  | ZZZ

之后,DB1.movi​​es应如下所示:

DB1.movi​​es

movie_name | year | synopsis | AKA
----------------------------------------
titanic    | 1997 | xxxxxxx  | XXX
matrix     | 1999 | yyyyyyy  | YYY
alien      | 1979 | zzzzzzz  | ZZZ

我该怎么办? 谢谢!

2 个答案:

答案 0 :(得分:1)

这应该可以解决问题:

UPDATE db1.table1 JOIN db2.table2 on db1.table1.movie_name = db2.table2.movie_name AND db1.table1.year = db2.table2.year SET db1.table1.synopsis = db2.table2.synopsis, db1.table2.AKA = db2.table2.AKA

注意我不知道db1和db2中表的表名,所以我只分别称它们为table1和table2。

答案 1 :(得分:1)

(我假设这些表在每个数据库中都被称为movies。)

如果要将数据替换为DB2中的影片(并且两个数据库中的表都具有匹配的主键),则可以执行以下操作:

replace into db1.movies select * from db2.movies

如果您只想更新现有行中的synonpsisAKA字段,请执行以下操作:

update db1.movies mov1, db2.movies mov2
   set mov1.synopsis   = mov2.synopsis,
       mov1.AKA        = mov2.AKA
 where mov1.movie_name = mov2.movie_name