如何在同一个表中将数据从一行复制到另一行?

时间:2012-08-01 01:19:22

标签: php mysql

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

我认为这很简单,但它不起作用。我的表名是'orders',列名为'rn'和'phone',order_no是'416'和'417'。我希望将来自416的电话和电话插入到电话列中,电话列为417.

我也试过这个查询,尝试只复制一条记录,但没有成功 并获得错误:#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 - 您无法指定目标表'orders'进行更新FROM子句:

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

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

3 个答案:

答案 0 :(得分:1)

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

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

它会创建你的身份#417

答案 1 :(得分: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 ");

答案 2 :(得分: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中断时自动删除