0

ある行の特定の列からデータをコピーし、それをすべて同じテーブルの別の行に挿入/更新しようとしています。各行にはすでにID番号(order_noと呼ばれる)があるため、自動インクリメントは必要ありません。

これはかなり簡単だと思いましたが、うまくいきません。私のテーブル名は「orders」で、列は「rn」と「phone」、order_noは「416」と「417」です。rn、および416の電話をrnに挿入し、417の電話列を挿入します。

私もこのクエリを試しましたが、1つのレコード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)が1つだけで無効になり、エラー#1093-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

クエリを変更できます

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 に答える
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 に答える