我正在使用 REPLACE 查询将一个表的内容替换为另一个表。这是我的桌子:
table_one
- ID
- 姓名
表二
- ID
- 名称
- 名字
这是我目前正在使用的查询:
REPLACE INTO tbl_two (id, fname)
SELECT id, name FROM tbl_one
我该怎么做才能使该lname
字段中的现有值不会变成NULL
?
好吧,当找到现有行(由 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
粗略地说,REPLACE 的记录行为是插入(如果目标中不存在主键),或者删除并插入。
如果目标中存在主键,则该行将被删除,并且 REPLACE 语句将像 SQL INSERT 语句一样运行。因此,新行中的所有值都必须 a) 由 REPLACE 语句提供,或者 b) 由表定义中的默认值提供。
如果您希望保留一些旧值,则必须从目标表中选择它们,并将这些值作为 REPLACE 语句的一部分提供。
INSERT ... ON DUPLICATE KEY UPDATE
可能是更好的选择。
您可以使用
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, PRIMARY KEY (ID) );
CREATE TABLE table_two(ID INT NOT NULL, fname VARCHAR (20) NOT NULL, Lname VARCHAR (20) NOT NULL, PRIMARY KEY (ID));
INSERT INTO tbl_two (id, fname)
SELECT id, ISNULL(name,'') FROM tbl_one
试试上面的sql查询。ISNULL 函数转换 ''(空白)中的空值。