アプリ版:「スタンプのみでお礼する」機能のリリースについて

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


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

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

A 回答 (1件)

基本的に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すればよいのでは?
    • good
    • 0
この回答へのお礼

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

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

お礼日時:2014/11/05 12:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す