我正在使用REPLACE查询将一个表的内容替换为另一个表。 这是我的表:
table_one
table_two
以下是我目前使用的查询:
REPLACE INTO tbl_two (id, fname)
SELECT id, name FROM tbl_one
如何执行此操作,以使lname
字段中的现有值不会变为NULL
?
答案 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函数在''(空白)中转换空值。