0

3 つのテーブル、2 つのインデックス テーブル、1 つのデータ テーブルを取得しました

テーブルの構造は次のようになります。

users:

id      | name
--------+----------- 
1       | John
2       | Mike
3       | James

idxidx2:

user_id  | user_id2 | action   | date
---------+----------+----------+----------
1        | 2        | message  | 2013-03-20
1        | 3        | message  | 2013-03-21
3        | 2        | chat     | 2013-03-21

以前は、2 つのテーブル、1 つのインデックス テーブル ('idx' という名前) と 1 つのデータ テーブル ('users' という名前) しかなかったので、クエリは次のようになりました。

SELECT * FROM idx inner join users WHERE idx.user_id='2' and idx.user_id2=users.id ORDER BY idx.date DESC

しかし、新しいインデックス テーブル (「idx2」という名前) が追加されました。構造は「idx」に似ています (「idx」と「idx2」を 1 つのテーブルに結合することはできないため、3 つのテーブルで作業する必要があります。一度)

だから今、私は3つのテーブルでクエリを作成することはできません

私はこのようなことをしようとしました:

SELECT * FROM idx,idx2 inner join users WHERE (idx.user_id='2' and idx.user_id2=users.id) or (idx2.user_id='2' and idx2.user_id2=users.id) ORDER BY idx.date DESC

しかし、これは機能しません。クエリは両方unionで構成されている必要があると思いますjoin...

何か案は?

ありがとう!

4

1 に答える 1

1

UNION は正しいようですが、テーブル構造は一致する必要があります。詳細を教えてください。たぶんsqlfiddleを使用していますか?

あなたの質問をよく理解していれば、これでうまくいくはずです:

(SELECT * FROM idx inner join users WHERE idx.user_id='2' and idx.user_id2=users.id)
UNION
(SELECT * FROM idx2 inner join users WHERE idx2.user_id='2' and idx2.user_id2=users.id) ORDER BY date DESC;

クエリは両方のテーブルからデータを返し、それらを適切に並べ替えます。私が作成したこの例を確認してください

于 2013-03-21T04:45:40.083 に答える