2

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

table_one

  • ID
  • 姓名

表二

  • ID
  • 名称
  • 名字

这是我目前正在使用的查询:

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

我该怎么做才能使该lname字段中的现有值不会变成NULL

4

4 回答 4

3

好吧,当找到现有行(由 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

于 2013-05-08T09:25:40.793 回答
2

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

如果目标中存在主键,则该行将被删除,并且 REPLACE 语句将像 SQL INSERT 语句一样运行。因此,新行中的所有值都必须 a) 由 REPLACE 语句提供,或者 b) 由表定义中的默认值提供。

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

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

于 2013-05-08T14:24:08.350 回答
-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, PRIMARY KEY (ID) );

CREATE TABLE table_two(ID INT NOT NULL, fname VARCHAR (20) NOT NULL, Lname VARCHAR (20) NOT NULL, PRIMARY KEY (ID));

于 2013-05-08T09:36:02.413 回答
-1
INSERT INTO tbl_two (id, fname)
SELECT id, ISNULL(name,'') FROM tbl_one

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

于 2013-05-08T09:50:24.517 回答