mysql:10180
From: "Takashi Yamashita" <"Takashi Yamashita" <takasi@xxxxxxxxxx>>
Date: Thu, 16 Sep 2004 19:21:38 +0900
Subject: [mysql 10180] Re: replace()関数の処理
お世話になっております。 ご回答ありがとうございます。>片寄様 > tbl_repのレコード数分のreplace()処理を > tbl_aの全てのレコードに逐次適用する > ことになりますよね。 そうです。 > どうしても、2重にループ処理が必要なのではないでしょうか。 > MySQLの機能だけ(力仕事)では > UPDATE....replace(....)... > をレコード数分実行することになりそうです。 tbl_repのレコード数は530件です。 一レコードずつ処理するクエリですと、 レコード数分の530回実行しないと置換が完了しない事になります。 それですと効率が悪いですので、 何とか一発で仕留められそうなクエリを作ってみました。 ========================================================= replace tbl_a select tbl_a.id, replace (tbl_a.field_n, tbl_rep.field_from, tbl_rep.field_to) as field_n from tbl_a, tbl_rep where tbl_a.field_n like concat('%', tbl_rep.field_from, '%') order by tbl_rep.field_from; ========================================================= # tbl_aのレコード数は38,296件です。 # tbl_a.idはプライマリキーです。 しかし、実行してみたら一回で置換が完了しませんでした。 実行結果は以下の通りです。 # 補足ですが、tbl_aのレコード数は38,296件です。 1回目: Query OK, 509798 rows affected (1 min 4.61 sec) Records: 254899 Duplicates: 254899 Warnings: 0 2回目: Query OK, 398056 rows affected (54.22 sec) Records: 199028 Duplicates: 199028 Warnings: 0 : : (途中省略) : : 14回目: Query OK, 2 rows affected (30.61 sec) Records: 1 Duplicates: 1 Warnings: 0 15回目: Query OK, 0 rows affected (30.85 sec) Records: 0 Duplicates: 0 Warnings: 0 何故上記クエリがtbl_repの全レコードを舐めてくれないのか、 何故クエリを複数回実行しないと置換が完了しないのか、 原因が分かりません。 どなたか教えて下さい。 宜しくお願いします。 ------------------------------------------------------------- 山下高司 takasi@xxxxxxxxxx
10172 2004-09-16 10:19 ["Takashi Yamashita" ] replace()関数の処理 10173 2004-09-16 11:07 ┗["片寄白王" <katayose] 10174 2004-09-16 11:31 ┗["Takashi Yamashita" ] 10179 2004-09-16 18:06 ┣["片寄白王" <katayose] -> 10180 2004-09-16 19:21 ┗["Takashi Yamashita" ] 10181 2004-09-16 20:28 ┗[UNO Shintaro <uno@xx] 10184 2004-09-16 21:53 ┗["Takashi Yamashita" ] 10192 2004-09-17 12:18 ┗[UNO Shintaro <uno@xx] 10193 2004-09-17 13:31 ┗["Takashi Yamashita" ]