に関するいくつかの詳細を表示する必要がありそうで
SELECT * FROM messages as M, payments as P, reports as R
WHERE M.receiver_id, P.client_id, R.receiver_id = 10
を3つのテーブルを使用することができますUNION
。これは、このような単純なことができます。これはあなたが興味のあるすべてのテーブル間の列の共通セットがあると仮定し
SELECT receiver_id as event_id, event_name, event_description, event_timestamp FROM messages WHERE receiver_id = 10
UNION
SELECT client_id as event_id, event_name, event_description, event_timestamp FROM payments WHERE client_id = 10
UNION
SELECT receiver_id as event_id, event_name, event_description, event_timestamp FROM reports WHERE receiver_id = 10
しかし、列は名前が異なるが、同じデータ(およびデータ型)が含まれている場合は、。あなたはUNION
は、データセット内の重複行を削除することを覚えておいてくださいUNION
SELECT receiver_id as event_id, col1 as event_name, col2 as event_description, col3 event_timestamp FROM messages WHERE receiver_id = 10
UNION
SELECT client_id as event_id, col_a as event_name, col_b as event_description, col_c event_timestamp FROM payments WHERE client_id = 10
UNION
SELECT receiver_id as event_id, col_x as event_name, col_y as event_description, col_z event_timestamp FROM reports WHERE receiver_id = 10
を達成するために、クエリ内の列の名前を変更するAS
を使用することができます。これがあなたが望む動作ではない場合は、代わりにUNION ALL
を使用してください(重複を排除しません)。
また、列データ型がテーブル全体で同じでない場合は、共通データ型にキャストする必要があります。キャストはDBMSに大きく依存しますので、正しい方法を使用してください。
3つのテーブルにすべての関係がある場合は、JOINSを使用します。 – Viki888
テーブル構造、サンプルデータ、および予想される結果を表示してください。 – Jens
この例では、receiver_idとclient_idの両方が10に等しい - これらの値がテーブル間の関係を形成すると想定するのは安全でしょうか? – RMathis