レコードAとBが等しい場合にupdateしたい!
- Mysqlの命令文を使って、テーブルAのanswerの値とテーブルBのuser_answerの値が同じ場合に、テーブルBのanswer_flagを0から1に変更する方法を知りたい。
- 現在の試みとしては、UPDATE文を使用してテーブルBのanswer_flagを1に更新しようとしていますが、うまく行っていません。
- 具体的には、次のSQL文を実行していますが、エラーが発生してしまいます。 UPDATE tbl_quiz_log SET answer_flag = 1 WHERE user_answer = ANY( SELECT tbl_question.anwser FROM tbl_question INNER JOIN tbl_quiz_log ON tbl_quiz_log.question_id = tbl_question.question_id )
- ベストアンサー
レコードAとBが等しい場合にupdateしたい!
Mysqlの命令文作成で完全に詰まってしまって途方に暮れています。 添付画像にあるように、テーブルAのanwserの値とテーブルBのuser_answerの値が同じ場合に、テーブルBのanswer_flagを0から1に変更するというMYSQLの命令文を書きたいのですが、上手く行きません。。。 UPDATE tbl_quiz_log SET answer_flag = 1 WHERE user_answer = ANY( SELECT tbl_question.anwser FROM tbl_question INNER JOIN tbl_quiz_log ON tbl_quiz_log.question_id = tbl_question.question_id ) 何が間違っているのでしょうか? どなたかお力をお貸し頂けませんでしょうか? どうぞよろしくお願い致しますm(_ _)m ●補足 ※1 キャプチャー画像のカラムは一部のカラムのみ表示している状態です。 ※2 ちなみに、テーブルAのanswerがスペルミスなのは把握しております。
- crzyonez
- お礼率100% (2/2)
- MySQL
- 回答数2
- ありがとう数2
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>テーブルAのanwserの値とテーブルBのuser_answerの値が同じ場合に、テーブルBのanswer_flagを0から1に変更する ご提示の命題と、サンプルの画像があってないですね choice3が一致していますが、question_idが違うのでご提示のデータは1にはなりません むしろ最終行のquestion_id=5のデータはchoice2なので合致します やりかたはこう UPDATE tbl_quiz_log as b INNER JOIN tbl_question as a ON a.question_id = b.question_id SET answer_flag = 1 WHERE a.answer=b.answer
その他の回答 (1)
- chie65535
- ベストアンサー率43% (8522/19371)
UPDATE tbl_question INNER JOIN tbl_quiz_log ON (tbl_question.answer=tbl_quiz_log.user_answer) AND (tbl_question.question_id=tbl_quiz_log.question_id) SET tbl_quiz_log.answer_flag = 1; こう? たぶん、 tbl_questionのquestion_idとtbl_quiz_logのquestion_idが一致(つまり、問題番号が一致) かつ tbl_questionのanswerとtbl_quiz_logのuser_answerが一致(つまり、回答者の答えが正解と一致) の時だけ tbl_quiz_logのanswer_flagを1にする が、質問者さんの希望する動作だと思うのだけど。
お礼
ありがとうございます!! chie65535さんの命令文も参考にさせて頂きます^^
関連するQ&A
- 別テーブルの行数を利用してソートしたい
MySQLバージョン4.1.16を使用しています。 テーブル「tbl1」をテーブル「tbl2」の「msg」カラムの行数を利用して ソートしたいのですが、どのようなSQL文になるのでしょうか? 以下の例だと、tbl2のuser_idがbbbbのmsg数の方が多いので descで並べるとtbl1はbbbb、aaaaの順になるようにしたいです。 テーブル「tbl1」 +----------+ | user_id | +----------+ | aaaa | +----------+ | bbbb | +----------+ テーブル「tbl2」 +----------+---------+ | user_id | msg | +----------+---------+ | bbbb | ああ | +----------+---------+ | aaaa | いい | +----------+---------+ | bbbb | うう | +----------+---------+ SELECT * FROM tbl1 INNER JOIN tbl2 ON tbl1.user_id = tbl2.user_id ORDER BY (ここの部分が知りたいです、または全く違う文になるのでしょうか?) desc
- ベストアンサー
- MySQL
- 別テーブルのカラムを利用してソートしたい
別テーブルのカラムを利用してソートしたい MySQLバージョン4.1.16を使用しています。 テーブル「tbl1」をテーブル「tbl2」のcountというカラムを利用して ソートしたいのですが、どのようなSQL文になるのでしょうか? 「tbl2」のidというカラムは外部キーで「tbl1」のidと関係しています。 テーブル「tbl1」 +------+---------+ | id | userid | +------+---------+ | 1 | tanaka | | 2 | sato | +------+---------+ テーブル「tbl2」 +------+---------+ | id | count | +------+---------+ | 1 | 10 | | 2 | 3 | +------+---------+ 次のような文かなと思ったのですが、エラーが返ってきます・・・ SELECT * FROM tbl1 ORDER BY (SELECT id FROM tbl2 ORDER BY count)
- ベストアンサー
- MySQL
- 順番に並んだ各レコードの、前後のレコードと結合
質問です。mysqlのTBLテーブルの同じカラムに 1 3 7 10 11 という数字データのレコードが入っています。 この時 3 1 7 3 10 7 11 10 と、それぞれのレコード(左)よりひとつ小さな数のレコード(右)を 並べて取得するSQL文はどう書けばいいのでしょうか? よろしくおねがいします。
- ベストアンサー
- MySQL
- postgresqlにて全レコードのupdate
PostgreSQLの全レコードを順次Updateしたいのですが、 SQLの記述方法がわかりません。 [やりたいこと] ユーザ情報を保持しているテーブルに、新しく"ID_TMP"カラムを追加。 カラム"ID_TMP"に、ユーザIDを保持しているカラム"ID_INFO"の内容を書き込む。 コピーしたいレコードが単一の場合、次のSQLで可能だと思うのですが、 テーブルに保持している全レコードを順次処理する方法を教えてください。 update [テーブル名] set ID_TMP = (select ID from [テーブル名] where id = [ID名]); 宜しくお願いいたします。
- ベストアンサー
- PostgreSQL
- 共通のカラムを持つテーブルの外部キーの設定
MySQLバージョン4.1.16を使用しています。 2つのテーブル「tbl1」と「tbl2」があり、 それぞれ共通のカラムを別のテーブル「common_tbl」に設定(正規化)し そのcommon_idを「tbl1」と「tbl2」が参照します。 例えば、「tbl2」にデータをinsertする場合に、 まず「common_tbl」からinsertして、そのinsert_idを取得(利用)して 「tbl2」にデータを挿入します。 たぶんこの場合のinsertはこのようなやり方だと思います(あまり自信ないなぁ・・・) 「tbl2」の行を削除した場合に、「common_tbl」の行も自動で削除させたいと思うのですが、 どのように外部キーを設定するのか(どこに設定するのか)が分かりません。 「common_tbl」に「tbl1」のtbl1_idと「tbl2」のtbl2_idを それぞれ持たせるのはたぶん違うと思いますし・・・ この場合の正しいテーブル構成を含めてアドバイスをお願いしたいです。 例: 「tbl2」のtbl2_idが2の行を削除したら、 「common_tbl」のcommon_idが3の行も削除したい(外部キーで自動的に) テーブル「tbl1」 +------+---------+----------+ | tbl1_id| tbl1_col1 |common_id | +------+---------+----------+ | 1 | 値1 | 1 | +------+---------+----------+ テーブル「tbl2」 +------+---------+----------+----------+ | tbl2_id| tbl2_col1 | tbl2_col2 |common_id | +------+---------+----------+----------+ | 1 | 値1 | 値1 | 2 | +------+---------+----------+----------+ | 2 | 値2 | 値2 | 3 | +------+---------+----------+----------+ テーブル「common_tbl」 +----------+---------+----------+ |common_id | col1 | col2 | +----------+---------+----------+ | 1 | 値1 | 値1 | +----------+---------+----------+ | 2 | 値2 | 値2 | +----------+---------+----------+ | 3 | 値3 | 値3 | +----------+---------+----------+
- ベストアンサー
- MySQL
- NULLだったら、aカラムの値をbカラムへコピー
■前提 ・MySQLの同じテーブル内に、datetime型の「aカラム」「bカラム」がある ■質問 ・この時、bカラムがNULLだったら、aカラムの値をbカラムへコピーするSQL文を教えてください
- ベストアンサー
- MySQL
- SELECTした値でUPDATEしたいのですが
<前提> ■oldテーブル ・idカラム ・createdカラム ・modifiedカラム ・その他色々カラム ■newテーブル ・idカラム ・createdカラム ・modifiedカラム ・その他色々カラム <やりたいこと> 両テーブルのidが一致するとき、 newテーブルの「created」「modified」カラムの値で、oldテーブルの同カラムを上書きしたい SQL文を教えてください
- ベストアンサー
- MySQL
- 優先順位を決めて、そこからランダムに選んでいく方法
MySQLバージョン4.1.16を使用しています。 次のような、priority(1が最も優先順位が高い)を カラムに持つテーブル「users」で、flagが1を条件として priorityが1から順番にランダムに1つだけ選びたいのです。 つまりこの場合、初めは priorityが1の「bbbb」行と「dddd」行からランダムに選ぶのですが、 flagが共に0なので条件に合わないので選ぶことはできません。 次に、priorityが2の「cccc」「eeee」「ffff」行のflagを調べて flagが1の「cccc」「ffff」行の2つからランダムに選ぶことになります。 このようなSQL文はどのような記述になるのでしょうか? テーブル「users」 +----------+---------+---------+ | user_id | priority | flag | +----------+---------+---------+ | aaaa | 3 | 1 | +----------+---------+---------+ | bbbb | 1 | 0 | +----------+---------+---------+ | cccc | 2 | 1 | +----------+---------+---------+ | dddd | 1 | 0 | +----------+---------+---------+ | eeee | 2 | 0 | +----------+---------+---------+ | ffff | 2 | 1 | +----------+---------+---------+
- ベストアンサー
- MySQL
- MySQL 複数テーブルのフィールドにUPDATE
よろしくお願いします。 PHP5、MySQL5、 PEAR DB、Smarty にて開発しております。 標題にもありますように、LEFT JOINを使ってUPDATEできる方法を探しております。 ●Aテーブル(親) id | del_flag ----------------- 1 | 0 2 | 0 3 | 0 4 | 0 ●Bテーブル id | del_flag ----------------- 1 | 0 3 | 0 4 | 0 ●Cテーブル id | del_flag ----------------- 1 | 0 2 | 0 3 | 0 4 | 0 上記のような3つ、またはもしくはそれ以上テーブルがあったとします。 そこで、 Aテーブルの id 2 のdel_flagを1 とアップデートしたときに、 同時に全てのB、Cのテーブルの id 2 のdel_flagも 1 としたく思います。 Bテーブルには、id 2 が存在しないため、結果的にはCテーブルだけが更新されますが、 A、B,Cともに同一のid値 がある場合も考慮して、 アップデートしたいと思います。 そこで、PHP内で、一つ一つのテーブルを地道にアップデートすることは可能だとおもいますが、 一度のSQLでdel_flagの値を1とできる方法はございませんでしょうか? お手数ですが、 具体的なクエリを書いていただけると、大変助かります。 いろいろ調べましたが、なかなか上手くいかず・・・・。 よろしくお願いいいたします。
- ベストアンサー
- MySQL
- SELECT/別テーブルのレコード数も取得したい
■環境 ・MySQL ■前提 ・テーブルA … idカラム ・テーブルB … A_idカラム ■やりたいこと ・テーブルAデータを取得する際、テーブルAレコードに応じて、テーブルB「A_idカラム」の数(レコード数)も取得したい ■取得イメージ例 ・テーブルA「全カラム」、「count」カラム ※「count」カラム … テーブルBにある「A_idカラム」の数 ■知りたいこと ・どこにも存在しないこの「count」カラムはどうやって作成したら良いでしょうか? ・全体のSQL文
- ベストアンサー
- MySQL
お礼
お~、ありがとうございます!! まさにその命令文で行けました!!! ホント、助かりました!