将REPLACE INTO与多个表一起使用

时间:2013-05-08 09:16:35

标签: mysql sql

我正在使用REPLACE查询将一个表的内容替换为另一个表。 这是我的表:

table_one

  • ID
  • 名称

table_two

  • ID
  • FNAME
  • L-NAME

以下是我目前使用的查询:

REPLACE INTO tbl_two (id, fname)
SELECT id, name FROM tbl_one

如何执行此操作,以使lname字段中的现有值不会变为NULL

4 个答案:

答案 0 :(得分:2)

好吧,当找到现有行(由PK或UNIQUE标识)时,REPLACE INTO将删除并重新创建一行

你可能宁愿使用

INSERT INTO...
ON DUPLICATE KEY UPDATE

INSERT INTO tbl_two (id, fname)
SELECT t.id, t.name FROM tbl_one t
ON DUPLICATE KEY UPDATE id = t.id, fname = t.name

请参阅SqlFiddle

答案 1 :(得分:2)

松散地说,REPLACE的记录行为是插入(如果目标中不存在主键),或者删除和插入。

如果主键存在于目标中,则该行将被删除,REPLACE语句将充当SQL INSERT语句。因此,必须通过REPLACE语句提供新行中的所有值,或者b)通过表定义中的默认值提供。

如果您希望保留一些旧值,则必须从目标表中选择它们,并将这些值作为REPLACE语句的一部分提供。

INSERT ... ON DUPLICATE KEY UPDATE可能是更好的选择。

答案 2 :(得分:-1)

您可以使用

REPLACE INTO table_two(id,fname,Lname) SELECT id,fname,“”FROM table_one

使用以下脚本在http://sqlfiddle.com/#!2/67a0f/1 尝试

CREATE TABLE table_one(    ID INT NOT NULL,    fname VARCHAR(20)NOT NULL,    主要钥匙(ID) );

CREATE TABLE table_two(    ID INT NOT NULL,    fname VARCHAR(20)NOT NULL,    Lname VARCHAR(20)NOT NULL,   主要钥匙(ID) );

答案 3 :(得分:-1)

INSERT INTO tbl_two (id, fname)
SELECT id, ISNULL(name,'') FROM tbl_one

尝试上面的sql查询。 ISNULL函数在''(空白)中转换空值。