下記のようなカラムがある時、DBから取得した値を、引数(並べ替え順)に応じて、(同じカラムを)更新するSQL文を教えてください
●カラム
id1 sex1 age1 id2 sex2 age2 id3 sex3 age3 id4 sex4 age4
●引数例
3
1
2
※1番目が3、2番目が1、3番目が2
・「1の数字が付いたカラムの値」を、「3の数字が付いたカラムの値」で更新したい
・「2の数字が付いたカラムの値」を、「1の数字が付いたカラムの値」で更新したい
●質問
・MySQLだけで処理可能でしょうか?
UPDATE テーブル名 SET id1=(SELECT id3 FROM テーブル名 WHERE id1=id3値),sex2=(SELECT sex3 ……;
・それとも、一度、全ての値を取得して、PHP等で処理するのでしょうか?
UPDATE テーブル名 SET id1=id3値,sex1=sex3値,age1=age3値,id2=id1値 ……;
・他に何か良い方法はあるでしょうか(一旦別テーブル作成後、戻す等)
●環境
MySQL5.1
No.1ベストアンサー
- 回答日時:
動的にSQLを書き換えて実行することはMYSQL単体でも可能です。
(ストアドプロシジャとかで)
頻繁に入れ替えないのなら、それでもいいと思います。
しかし単純なUPDATE文で更新するのの100倍は時間がかかると思います。
(結構めんどくさいですし)
そもそも、テーブルの設計に問題があるように思います。
常に4人のデータが入っているのならまだ、いいのですが
NULL値などがあるとさらに上の処理が煩雑になります
もし、テーブル設計を見直せるなら
table
pk, group, id, age, sex
として
insert時に
idはgroupでグループ化し、count(pk)+1で取得
1つのグループが5人以上にならないようにトリガでチェックをかける
というふうにすれば上のテーブルと同じデータが格納できます。
拡張性も高いです。
で、肝心のUPDATEですが
ちょっとわかりません
まず、3,1,2の順番から
・「1の数字が付いたカラムの値」を、「3の数字が付いたカラムの値」で更新したい
・「2の数字が付いたカラムの値」を、「1の数字が付いたカラムの値」で更新したい
となるのがよくわかりません
予想ですが
・「3の数字が付いたカラムの値」を、「2の数字が付いたカラムの値」で更新したい
というのを書き忘れていて、3次の巡回置換(3つの入換という意味)を表しているのか
つまり1,2,3が3,1,2になるのか…(1)
それとも1,2,3が3,3,3になるのか…(2)
はたまた1,2,3が3,1,3になるのか…(3)
たぶん(3)だと思うのですがそれって意味がないような…。
まあ、どれでもテーブル構造さえ見直せば結構簡単にかけるので
テーブル設計を見直せるならやってみてください
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Oracle SQL update方法 2 2022/06/22 14:07
- MySQL 共通点はあります。何が違うのでしょうか? 1 2023/01/27 05:22
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- Oracle sqlで質問です。 idを元にidに紐付くデータで住所コードがjpのみのデータ以外のidを取得したい 4 2023/03/20 17:41
- その他(プログラミング・Web制作) google formsを使ったタスク依頼フォーム作成におけるご相談 1 2023/06/22 15:55
- Access(アクセス) アクセス テーブルの空白を変数に置換するボタンが作りたい 4 2022/07/08 11:19
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- Oracle sql(oracle)で質問です。 テーブルAのカラム名、日付(yyyymmdd)の値を テーブルB 2 2023/01/06 10:31
- MySQL テーブル作成時のカラムについて 2 2022/08/27 21:48
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
一部のカラムでdistinctし全て...
-
GREATESTで NULLをスルーする方...
-
AUTO_INCREMENTに0はダメ?
-
カラムをコピーして、新規カラ...
-
now()かCURRENT_TIMESTAMPか
-
SELECT文で、指定カラム以外の...
-
SQLについて教えて下さい。 SEL...
-
構造が異なる二つのテーブルをu...
-
smalldate型へnull値の代入
-
DBエラーの意味
-
文字列のカラムを数字と比較したい
-
DB2のBLOB型カラムに格納された...
-
複数テーブルから全データ取得...
-
MYSQLで全てのカラムから検索す...
-
UNIONする際、片方テーブルしか...
-
MySQLで先頭にカラムを追加
-
ドロップダウンリストの連動し...
-
エクセルかワードで家系図を作...
-
大文字小文字の区別をさせる関数
-
カラムとコラムの使い分け
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SELECT文で、指定カラム以外の...
-
UNIONする際、片方テーブルしか...
-
一部のカラムでdistinctし全て...
-
MYSQLで全てのカラムから検索す...
-
GREATESTで NULLをスルーする方...
-
now()かCURRENT_TIMESTAMPか
-
sql , insert で空行(全ての列...
-
AUTO_INCREMENTに0はダメ?
-
構造が異なる二つのテーブルをu...
-
カラムをコピーして、新規カラ...
-
ドロップダウンリストの連動し...
-
SQLでカラムを追加し、条件に合...
-
SQLで、行ごとのとある要素を比...
-
MySQLで論理名を取得する方法
-
MySQLで先頭にカラムを追加
-
日付を一括UPDATE
-
SQLについて教えて下さい。 SEL...
-
カラムとコラムの使い分け
-
文字列のカラムを数字と比較したい
-
ROUND関数で、四捨五入ができな...
おすすめ情報