sql查询 - 如何连接/联合3个表(2个索引表和1个数据表)

时间:2013-03-21 04:40:11

标签: mysql join union multiple-tables

我有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'组合成一个表,所以我们需要使用一次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

但是这不起作用,我想查询应该包含unionjoin ......

任何想法?

谢谢!

1 个答案:

答案 0 :(得分: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;

查询返回两个表中的数据,并正确排序:查看example我做的