【发布时间】:2011-10-23 00:03:51
【问题描述】:
(SELECT posts.id FROM posts
INNER JOIN discussions ON discussions.post_id = posts.id
INNER JOIN companies ON discussions.company_id = companies.id
INNER JOIN subscriptions ON subscriptions.subscribable_id = companies.id AND subscriptions.subscribable_type = 'Company'
INNER JOIN users ON subscriptions.user_id = users.id WHERE users.id = 6)
UNION
(SELECT posts.id FROM posts
INNER JOIN users users_2 ON posts.analyst_id = users_2.id
INNER JOIN subscriptions ON subscriptions.subscribable_id = users_2.id AND subscriptions.subscribable_type = 'User'
INNER JOIN users ON subscriptions.user_id = users.id WHERE users.id = 6)
很明显,两个查询中的最后一个连接是相同的。只是不确定如何“或”连接在一起。
【问题讨论】:
-
使用 UNION 有什么问题? (除了用 UNION ALL 替换 UNION 的可能性)
-
基本上是为了干掉我的 SQL 查询。如果这不是两个查询,我还有其他更有效的操作。
-
我也愿意“接受”一个指向一个地方的答案,该地方说连接不能被“或”在一起。
-
联合有时可以合并。结果可能会更快,也可能不会。