私の質問はこれです:同じテーブルから結合するときに複数の行を出力することは可能ですか? たとえば、このコードでは、テーブルごとに 1 行ずつ、2 行を出力したいと考えています。代わりに、すべてのデータを含む 1 行が表示されます。
SELECT t1.*, t2.*
FROM table t1
JOIN table t2
ON t2.id = t1.oldId
WHERE t1.id = '1'
更新
UNION/UNION ALL で私が抱えている問題はこれです: t1.oldId 値が何に等しいかわかりません。私が知っているのはt1のIDだけです。私は2つのクエリの使用を避けようとしているので、次のようなことができる方法はありますか:
SELECT t1.*
FROM table t1
WHERE t1.id = '1'
UNION
SELECT t2.*
FROM table t2
WHERE t2.id = t1.oldId
サンプルデータ
messages_users
id message_id user_id box thread_id latest_id
--------------------------------------------------------
8 1 1 1 NULL NULL
9 2 1 2 NULL 16
10 2 65 1 NULL 15
11 3 65 2 2 NULL
12 3 1 1 2 NULL
13 4 1 2 2 NULL
14 4 65 1 2 NULL
15 5 65 2 2 NULL
16 6 1 1 2 NULL
Query:
SELECT mu.id FROM messages_users mu
JOIN messages_users mu2 ON mu2.latest_id IS NOT NULL
WHERE mu.user_id = '1' AND mu2.user_id = '1' AND ((mu.box = '1'
AND mu.thread_id IS NULL AND mu.latest_id IS NULL) OR mu.id = mu2.latest_id)
このクエリは私の問題を解決します。しかし、私の質問に対する答えは、 a ではJOIN
なく aを使用することのようUNION
です。