こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

SQLの統合コマンドについて

phpMyAdminを使ってます。一つのデータベースに入ってる二つのテーブルを統合するため、機能でいうとFULL OUTER的なのがやりたいのですがphpMyAdminがそれをサポートしていないので、代わりにUNIONを使ってやろうと思ったら、二つのテーブルのカラムの数と型が同じでないとできないらしく、そこで止まってしまってるのですが、どうにかできるコードはないでしょうか?


もともとは日本語のデータベース(1)と英語のデータベース(2)で分けていたのですが、英語(2)では入れなくてもいいデータがたくさんあり、カラムの数が2倍くらい変わってしまっているので、今から英語(2)の方を無理矢理日本語(1)に合わせるとなるとなんかデータが変になりそうなのでそれはまだやってないんですが。←無理矢理合わせるのはどうにも方法がなくて最終手段としてやりたいです。

回答よろしくおねがいします。
何か抜けている点があったら言ってください!

投稿日時 - 2014-11-04 18:08:49

QNo.8813777

すぐに回答ほしいです

質問者が選んだベストアンサー

基本的にMySQLではFULL OUTER JOINはできませんが、
今回の命題ではそもそもJOINじゃなくてテーブルの統合ですよね?
であればどちらかのテーブルにもう片方を流し込むか、あらたなテーブルをつくって
両方流し込むのが妥当では?

とりあえず統合するキーになるカラムがprimaryもしくはunique属性で処理されている
前提で解説します。

例示のものだとテーブル1(データベースじゃないですよね?)にテーブル2を
流し込みたいと読めるので

INSERT IGNORE INTO テーブル1(カラム1,カラム2,・・・・)
SELECT カラム1相当のカラム,カラム2相当のカラム,・・・・ FROM テーブル2;
※テーブル2に該当するカラムがないならNULLを指定する

とすれば既にテーブル1にあるテーブル2のデータは無視され、テーブル1にないものだけ
あらたに挿入されます。
逆にテーブル1に競合データがあってもテーブル2で上書きするなら
INSERT ON DUPLICATE KEY UPDATE構文が有効かもしれません。

新規でテーブルをつくるのであれば、CREATE TABLEするさいに有効なユニーク属性を
設定したうえで、テーブル1、テーブル2の順番で流し込めばいいでしょう

また無理やりFULL OUTER JOINするなら、キーになる絡むだけUNIONして
サブクエリを作っておくかVIEWを用意しておき、そこにテーブル1とテーブル2を
LEFT JOINすればよいのでは?

投稿日時 - 2014-11-04 18:59:46

お礼

回答ありがとうございます!
テーブルを直でくっつける方法しかなさそうですね!

そういう感じでやってみます!

投稿日時 - 2014-11-05 12:08:17

ANo.1

このQ&Aは役に立ちましたか?

6人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問