2012-08-01 179 views
0

我试图从一行中的特定列中复制数据,并将其插入/更新到另一行,全部在同一个表中。每行都有一个ID#(称为order_no),所以不需要自动增量。如何在同一个表中将数据从一行复制到另一行?

我认为这会很简单,但它只是不工作。我的表名是'orders',列名称是'rn'和'phone',order_no是'416'和'417'。我想,并且从416插入到手机中,并且电话列为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 - 你不能指定目标表“订单”的更新FROM子句:

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

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

+0

你得到一个错误

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 

:你应该用临时表是这样?发生了什么? – 2012-08-01 01:29:58

+0

我得到的错误,使用更新的查询是:#1136 - 列计数与第1行的值计数不匹配 – DeeJay 2012-08-01 08:19:44

回答

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 "); 
+0

上述查询给我这个错误:#1136 - 列计数与第1行的值计数不匹配 – DeeJay 2012-08-01 08:18:47

+0

您正在插入两个值,但在选定部分中指定了三个值 - 当然,它与值数不匹配,找到并修复它并不难。 – 2012-08-01 08:32:08

+0

我以为416指定了ID和手机数据的来源。我在哪里指定从哪里选择它们?它是否需要像我的第二次尝试顶部的子查询? – DeeJay 2012-08-01 08:41:30

1

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

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

会造成你的ID#417

+0

我已经有ID#417,并且想要从416(相同的列字段名称,电话号码)中移动/复制两个特定的字段 – DeeJay 2012-08-01 08:29:12

+0

使用更新操作!但为什么你想把它移动到416? – 2012-08-01 09:41:58

+0

我已经设置了行,使用CRUD更新(减去删除)。他们只是写了数据,并没有创建额外的行(ID)。 416充当待定行,当准备好时用户单击按钮并且将执行查询以将数据移动到417 ....仍然没有运气让这个工作起作用。上面使用的更新查询不会执行。 – DeeJay 2012-08-01 16:45:33

0

你可以' t在update和value语句中使用同一个表,因为它可能导致无限循环。如果你忘了删除临时表将被删除时自动db_connection将被打破

相关问题