• 締切済み

UPDATE文の中でのSELECT文は可能?

タイトル通りなのですが UPDATE文構造の中にSELECT文は使用できるのでしょうか? リファレンス見ても使えそうに無いのでたぶんできないと思うのですが、やりたいことは customer ┌──┬─────┐ │id │frequency │ ├──┼─────┤ │101 │ 2    │ │102 │ 1    │ │103 │ 1    │ │104 │ 2    │ └──┴─────┘ buy ┌──┬──────┐ │id │catalognum │ ├──┼──────┤ │101 │1255 │ │104 │1353 │ │102 │1255 │ │103 │1521 │ │104 │1351 │ │105 │1345 │ │101 │1351 │ └──┴──────┘ 上記のテーブルのcustomerへのUPDATEです。 buy.id個数をCOUNTしてcustomer.frequencyに反映させるということです。 REPLACE内でのSELECTは可能ですが、いちいち全てのfieldを設定してやらないと、他のフィールドがNULLで埋まってしまうので、UPDATE文で更新できるなら比較的楽かなぁと思っています。 ------------------------------- REPLACE文だとこんな感じです REPLACE customer (id,frequency) FROM customer , buy WHERE buy.id = customer.id GROUP BY customer.id ----------------------------- 環境 MySQL 3.23.58 freeBSD PHP 4.3

みんなの回答

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

update customer set frequency = (select count(*) buycount from buy where customer.id = buy.id group by buy.id) これでどうですか?

inu2
質問者

お礼

どうやら、MySQL 3.23ではつかえないみたいです。(>_<) お手数かけました

inu2
質問者

補足

ありがとうございます、SELECTを()で囲んでやっては見たんですが、上手くいかなかったんです。書き方悪かったかな? 今出先なので、後で試して見ます。 ありがとうございました ---関係ないですが、例で出したREPLACEが間違ってました、あわてて書いたのでミスりました---- REPLACE customer (id,frequency) SELECT customer.id,COUNT(buy.id) FROM customer , buy WHERE buy.id = customer.id GROUP BY customer.id

関連するQ&A