【问题标题】:sql query - how to join/union 3 tables (2 index tables and 1 data table)sql 查询 - 如何连接/联合 3 个表(2 个索引表和 1 个数据表)
【发布时间】:2013-03-21 04:40:10
【问题描述】:

我有 3 个表、2 个索引表和 1 个数据表

tables的结构是这样的:

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...

有什么想法吗?

谢谢!

【问题讨论】:

    标签: mysql join union multiple-tables


    【解决方案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

    【讨论】:

    • 不,这不能正常工作。它从idx 获取所有记录,然后从idx2 获取所有记录,但我需要将它们混合在一个提要中,按date 字段排序
    • 添加了一个 sqlfiddle 示例,以便我们澄清问题
    猜你喜欢
    • 2011-08-18
    • 2018-03-05
    • 2015-06-09
    • 2015-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-24
    • 1970-01-01
    相关资源
    最近更新 更多