0

我正在尝试从一行中的特定列复制数据,并将其插入/更新到另一行中,所有这些都在同一个表中。每行已经有一个 ID #(称为 order_no),因此不需要自动递增。

我认为这很简单,但它只是行不通。我的表名是“orders”,列被称为“rn”和“phone”,order_no 是“416”和“417”。我希望将 rn 和来自 416 的电话插入 rn,并将电话列插入 417。

我也试过这个查询,试图只复制一条记录 rn,没有成功并得到错误:#1248 - 每个派生表都必须有自己的别名

mysql_query("UPDATE orders
  SET rn =
     ( SELECT rn
        FROM ( SELECT rn
                FROM orders
                  WHERE order_no = 416
             ) 
 WHERE order_no = 417 ");

我试过这个没有成功,并得到错误 #1136 - 列数与第 1 行的值计数不匹配

  mysql_query
(" INSERT INTO orders (rn, phone)
SELECT rn, phone, 416
from orders
WHERE order_no = 417 ");

更新。我也在下面尝试了这个查询,只有一个字段 (rn) 无济于事,它会引发错误 #1093 - You can't specify target table 'orders' for update in FROM 子句:

     mysql_query("UPDATE orders 
SET rn = (SELECT rn FROM orders WHERE order_no = '416') 
WHERE order_no = '417' ");

非常感谢任何帮助或帮助。谢谢

4

3 回答 3

1

这几乎是正确的方法......试试这个

INSERT INTO orders  (rs, phone)
SELECT rs, phone
from orders
WHERE id = 416

它将创建您的 id #417

于 2012-08-01T01:35:20.927 回答
0

不能在 update 和 value 语句中使用同一张表,因为它会导致无限循环。您应该使用这样的临时表:

CREATE TEMPORARY TABLE temp_tb_name(SELECT * FROM original_table WHERE where_case);
UPDATE original_table SET field_name = (SELECT field_name FROM temp_tb_name WHERE where_case) WHERE where_case;
DROP TEMPORARY TABLE IF EXISTS temp_tb_name

如果您忘记删除临时表,它将在 db_connection 断开时自动删除

于 2013-08-21T14:48:19.057 回答
0

您可以修改您的查询

mysql_query
(" INSERT INTO orders (rn, phone)
SELECT rn, phone, 416
WHERE order_no = 417 ");

mysql_query
(" INSERT INTO orders (rn, phone)
SELECT rn, phone, 416
from orders
WHERE order_no = 417 ");
于 2012-08-01T01:30:14.037 回答