回答受付が終了しました

電話番号の重複チェックをした後テーブルを作成したい。 数日前にSQL文の作成方法について質問させていただきました。

電話番号の重複チェックをした後テーブルを作成したい。 数日前にSQL文の作成方法について質問させていただきました。 https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13231521043 親切なお方にSQL文章を作っていただきまして理想通りの動きになりました。 CREATE TABLE tableD-double AS SELECT 2,COL5 FROM tableA A WHERE EXISTS(SELECT 0 FROM tableB B WHERE REPLACE(B.COL17,'-','')=REPLACE(A.COL5,'-','')) です。 変更したい箇所が2つありまして、また質問させてください。お手数おかけしますがよろしくお願いいたします。 tableA というテーブルに COL5というカラムがあり電話番号が入っています。そして、COL8に メモ というカラムがあり、メモデータが入っています。 そして、tableB という別のテーブルがあり、COL17 というカラムの中に電話番号が入っています。そして、COL28 にメモというカラムがあり、メモデータが入っています。 この2つのテーブルには重複する電話番号が複数あり、このように 0223-11-2222 0234009999 ハイフンがはいっていたり、全部続けて数字が続いていたりと様々な電話番号の形になっています。 行いたいことは以下の2つになります。 (1) tableA の電話帳データを基準として、 tableB と比較し、同じ電話番号が存在した場合は、tableH-doubleというテーブルを作成し、tableAに現在ある ”全てのカラム”を入れたいです。 (2) tableA の電話帳データを基準として、 tableB と比較し、同じ 電話番号 が存在しなおかつ、同じ メモ も存在した場合のみtableQ-doubleというテーブルを作成し、tableAの”全てのカラム”を入れたいです。 大変お手数おかけしますが、お力を貸してください。よろしくお願いいたします。

MySQL | データベース6閲覧xmlns="http://www.w3.org/2000/svg">50

回答(1件)

0

ハイフン抜きの状態で(実際の「電話番号」で)重複かどうかをチェックするのですよね? 実直に書けば、下記のようになるとは思います。が、処理する件数によっては速度的に『許容範囲に収まるかどうか』を確認する必要があるかもしれません。 #こちらではどの程度が許容範囲かもわかりませんが(汗 (1) insert into tableH-double select * from tableA where replace(COL5, '-', '') in (select replace(COL17,'-', '') from tableB) ; (2) insert into tableQ-double select * from tableA where replace(COL5, '-', '') in (select replace(COL17,'-', '') from tableB) and COL8 in (select COL28 from b); ハイフンの有無が統一されたカラムを生成しておけば join でいけるのになとか、そのカラムにインデックス張っておくとモアベターだなとかは思います。COL5,COL17のハイフン抜きのデータを各々COL5N,COL17N に格納しておけば (1) insert into tableH-double select tableA.* from tableA join tableB on tbaleA.COL5N=tableB.COL17N (2) insert into tableQ-double select tableA.* from tableA join tableB as X on tbaleA.COL5N=X.COL17N join tableB as Y on tbaleA.COL8=Y.COL28 で済みますよね。

ご回答誠にありがとうございます。 とても分かりやすい説明で助かります。1つお伺いしたいのですが、わたしは新しくテーブルを作成してそこに上記の条件でカラムを羅列したいのですが、SQL文の始まりは CREATE TABLE ではないのでしょうか?