• 締切済み

SQLでレコード間の値の交換

MySQLを利用しています。 テーブルにIntegerでそのレコードの内容の優先度を書いていますが、 これを早く交換するのにはどのような書き方がよいのでしょうか。 例えば、 |No|YUSEN|NAIYO | |01| 1|自動車|   ←ここと |02| 2|飛行機| |03| 3|船舶 |   ←ここのYUSENの値を交換したい      ↓ |No|YUSEN|NAIYO | |01| 3|自動車| |02| 2|飛行機| |03| 1|船舶 | と行った具合です。 よろしくお願い致します。

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

>Noの01と03のYUSENを入れ替えなさい UPDATE hoge as h1,hoge as h2 SET h1.YUSEN=h2.YUSEN WHERE (h1.No='01' AND h2.No='03') OR (h1.No='03' AND h2.No='01');

GpH2
質問者

補足

yambejp様 お礼が遅くなってすみません。 実は、SQLサーバーがMicrosoft SQL Server 2005 Express Editionに、 命令が「Noの01と03のYUSENを入れ替えなさい」から「YUSENの01と03 を入れ替えなさい」というように変わってしまいました。 試行錯誤しているのですが、「'as' 付近に不適切な構文があります」 と出てしまい困っています。 (MS-SQLではだめでしょうか?) 教えていただいたのは、テーブルをAS句で2つの名前で持って処理を するということだと思いますが、これは一般的なSQLの書き方と思っ てよいのでしょうか? (テーブル名はTB_YUSENでした) すみません。よろしくお願い致します。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

なにをキーにYOUSEが1や3だということを知るのでしょうか? そのあたりの定義があいまいだと回答ができません。

GpH2
質問者

補足

YUSEN(優先度)が決められているのですが、 それを、変更するという処理です。 指示されるのは、Noの01と03のYUSENを入れ替えなさい という処理です。

関連するQ&A