我正在尝试从一行中的特定列复制数据,并将其插入/更新到另一行,所有这些都在同一个表中。每行都有一个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' ");
非常感谢任何帮助或帮助。谢谢
答案 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中断时自动删除