2017-03-12 8 views
-1

私は5つの "イベント"テーブルを持っています。どちらもそれぞれ異なるデータを持っていますが、2つの同一のフィールドを共有しています: "mission_id" "mission_tick"複数のmysqlテーブルから同じインデックスを共有するデータ構造を選択してデータ構造を持たないデータを選択する

これらのすべてのテーブルのデータを取得するには、mission_id = xとORDER BY mission_tickというデータを取得したいと思います。

異なる数の列を持つUNIONを使用することはできません。一致しない可能性のある列ごとに手動で「as null」を実行するには多すぎます。理想的には、列名の重複も避けたいと思います。たとえば、4/5の表にはすべて「タイプ」列があります。

(SELECT * FROM events_downed WHERE mission = 12) UNION (SELECT * FROM events_get_in_out WHERE mission = 12)

+0

あなたは 'JOIN'を使用したことがありますか? – CollinD

+0

はい、LEFT JOINは、各行の各表の結果を同じ行に別々のmission_timeの複製とともにマッシュしているようです。 – Titan

+0

DISTINCTを使用してLEFT JOINを試しましたか? – Jontatas

答えて

0

あなたがそれを述べたように、「彼らは異なる数の列を持っている」と、実際にあなたが別の列を持つ別のテーブルからデータをフェッチするクエリを記述することはできませんので、あなたはUNIONを使用することはできません。

で最高のあなたは1列にすべての「異なる」列をグループにCONCATまたはCONCAT_WSを使用することができますが、結果は、使用するのは難しいだろう。

SELECT * 
FROM (
    (SELECT mission_tick, CONCAT_WS(' ', col1, col2, col3...) FROM events_downed WHERE mission = 12) 
    UNION 
    (SELECT mission_tick, CONCAT_WS(' ', col1, col2, col3...) FROM events_get_in_out WHERE mission = 12) 
) as x 
ORDER BY mission_tick; 

は、理想的には、私は重複を避けるしたいのですが列名も。たとえば、4/5の表にはすべて「タイプ」列があります。

これは、すべてのテーブルにその列がない場合は不可能です。

状況によっては、テーブルごとに1つずつ別々のクエリを記述することをお勧めします。

関連する問題