• 締切済み

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

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

  • GpH2
  • お礼率83% (20/24)
  • MySQL
  • 回答数2
  • ありがとう数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

  • SQLで、重複レコードを削除

    no type name ---------------------------- 1 1 peach 1 1 peach 2 5 tomato 4 6 apple 4 6 apple 1 1 peach  上記のように、重複するレコード(行)が存在してしまっているテーブルで、重複をなくす処理を、SQLで簡単に行なうにはどうしたら良いでしょうか。MySQLです。上の例では、下のように更新したいのです。よろしくお願いします。 no type name ---------------------------- 1 1 peach 2 5 tomato 4 6 apple

    • ベストアンサー
    • MySQL
  • SQLで優先順位が高いレコードを抽出する方法

    こんにちは。 あるテーブル"T_A"が有り、 そのテーブルにカラム"C1"、"C2"が有ります。 テーブル"T_A"にレコードが以下の用に登録されていると仮定します。 C1|C2 ----- AA|S AA|P BB|R BB|S CC|S ※C2に登録されている値は抽出する優先順位が有り、 R:1 P:2 S:3 Rが一番優先順位が高く、Sが優先順位が最も低いです。 この条件から、C1の値が同じレコードに対して、C2の優先順位が 最も高いレコードを抽出したいです。 欲しい結果↓ C1|C2 ----- AA|P BB|R CC|S

  • 2つのテーブルからレコードを抽出する方法

    お世話になります。MySQLに関する質問です。 TABLE1とTABLE2の2つのテーブルからレコードを抽出する際、 TABLE1からは全項目のデータを取得し、TABLE2からは一部の項目の データを取得したいと考えています。 条件は、TABLE1とTABLE2を[No]という項目の値で紐(ひも)づけます。 (1) SELECT * FROM TABLE1 (2) SELECT COL_A, COL_B, COL_C FROM TABLE2 上記(1)(2)のレコードを1つのSQLで取得する方法について、どなたかご教授願えますか?

    • ベストアンサー
    • MySQL
  • MySQLで特定の条件のレコードをテーブルから検索するクエリ文がわかり

    MySQLで特定の条件のレコードをテーブルから検索するクエリ文がわかりません。 テーブルの構造は以下のとおりとします。 member_id INT post_no INT goods_no INT 上記のテーブルから、複数のgoods_noが指定された時(指定されるgoods_noは1個から10個までの間とします)それらの指定された値をすべて含むmember_idとpost_noの組み合わせをすべて検索したいのです。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • あるIDごとの最高値のレコード抽出について

    下記のようなテーブルがあるとします。 それぞれの人の最高得点であるレコードを抽出したいのですが可能でしょうか。 テーブル:result no id point date -------------------- 1 A 60 ... 2 A 70 3 B 50 4 B 90 期待出力 no id point date ------------------- 2 A 70 ... 4 B 90 自分でも色々考えたつもりですが、例えば select max(point) from result group by id; とすると 70,90 という値は抽出されますが、該当レコードの全カラムを出力させたいです。 もし同じidで同じpointのレコードがあった場合は、dateの新しいほうを優先したいです。 id,point,dateがまったく同じレコードは存在しないと仮定します。 この他にもdistinct等も考えましたが、指定したカラムが重複した場合どのレコードが選択されるかは 不定のようですので使えそうにありません。 そもそもSQLだけでこのような出力が可能かどうかもわかりません…。 テーブルの設計が悪いというのもあるのでしょうか。 どなたかご助言くだされば幸いです。

  • MySQLで一番最後のレコードをしる関数って?

    MySQLで一番最後のレコードを知る関数ってありますか? noや時間情報のソートの最初の値ではなく、簡単に最後に追加したレコードを取得する方法。 ないなら、方法としてはレコード数をカウントして、全カウント数番目をselectすればいいんでしょうか? SQLには、最後とかの概念がないかな?

    • ベストアンサー
    • MySQL
  • 条件によってレコードを取得したい

    Mysqlで以下のような条件のSQL文がわかりません。 hogeというフィールドの値に1があればそのレコードを取得 hogeに1という値のフィールド値をもったレコードがないならhogeが空のレコードを取得したいのですが方法がわかりません。 SELECT * FROM `tebleA` where (`hoge` = '1') or `postageFee_memId` = '' LIMIT 5 上のSQL文ではどうしても「`postageFee_memId` = '' 」のほうが優先されます。 (優先されるのはオートインクリメントIDが小さいから当然ですが・・) 「`hoge` = '1'」が絶対優先されるようにしたいのです。 いわゆる 「`hoge` = '1'」がない場合だけ「`postageFee_memId` = ''」が実行できればと思います。 ifとかを使って条件文をかけばいいのでしょうか? 足らずの情報があればおっしゃってください。 何卒ご教授お願いいたします。

  • ACCESS2000でのレコード抽出

    OS:WindowsXP ACCESS2000 あるフィールドの値が最大となるようなレコードを選択クエリで 抽出しようとしているのですがうまくいきません。 テーブルのフィールドは4個あります。 テーブル [系列] [優先度] [データ1] [データ2] ここで各系列ごとに優先度が最大となるレコードのみを 抽出したいのです。 系列、データ1、データ2は重複がありえます。 優先度は系列を跨いだ重複はありますが、 同系列内での重複はありません。 レコードの例) 1:系列A 優先度1 データA データB 2:系列A 優先度2 データC データD 3:系列B 優先度1 データE データF 上記の例で言いますと、レコード2:とレコード3:のみを 抽出するクエリを作成したいのです。 集計クエリで優先度のフィールドを「最大」にしても、 3つのデータ全てが抽出されてしまいます。 どなたか解決策をご教示ください。

  • SQLで分からないことがあります。

    仕入明細テーブル 伝票NO   インデックス番号   部数 出費詳細テーブル 伝票NO  出費先  出費額 以上のデータがあります。 仕入明細テーブルでインデックス番号でグルーピング化して部数の合計値が2000以上のインデックス番号と同じ値の出費詳細テーブルの伝票NOのレコードを削除しなさい。 delete 出費詳細 where 伝票NO in (select インデックス番号, sum(部数) from 仕入明細             group by インデックス番号             having sum(部数) >= 100); これだと出来ませんよね? sum(部数)が100以上のものを抽出するためにはselectでsum(部数)としなくてはいけないのですが これだとダメですよね?伝票NOと同じか比較するのインデックス番号なので、selectでsum(部数)としないのは可能でしょうか?

  • 複数のSQLを合体させる方法

    環境:XP&Apache2&MySQL5&PHP5 examinというテーブルがあります。 全部で80レコードあり、このうちの20レコードを任意に表示させます。 $qq ="select * from examin ORDER BY RAND() LIMIT 20"; $qu = mysql_query($qq); while($ro=mysql_fetch_assoc($qu)) { ここまでは出来るのですが、 examinのフィールドに表示させる順番を持たせ、(grpaというフィールド名にしました) 例えばgrpaが値1のもの(実際は4レコード)を任意に1レコード最初に表示させ、 grpaが値3のもの(実際は3レコード)を任意に1レコード3番目に表示させ、 grpaが値20のもの(実際は6レコード)を任意に1レコード20番目に表示させる、 という方法がわかりません。 $qq1 ="select * from examin where `grpa`=1 ORDER BY RAND() LIMIT 1"; $qu1 = mysql_query($qq1); $qq2 ="select * from examin where `grpa`=2 ORDER BY RAND() LIMIT 1"; $qu2 = mysql_query($qq2); -- $qq20 ="select * from examin where `grpa`=20 ORDER BY RAND() LIMIT 1"; $qu20 = mysql_query($qq20); とやって最後に while($ro=mysql_fetch_assoc($qu)) { の$quの部分を加工すればいいのかな、とも思いますが、 どうすればいいか思いつきません。 アドバイスいただけると幸いです。

    • ベストアンサー
    • PHP