在此查询中使用SQL UNION的替代方法?

时间:2012-06-30 23:19:24

标签: mysql sql

我有一个包含user1和user2列的friends表以及一个包含登录字段的users表。

朋友“pair”可以以任何方式存储,例如user1 = Joe和user2 = Dave,或者它可以是user1 = Dave和user2 = Joe,同样的事情。

我想找到过去30天内登录过的所有用户朋友(比如“Joe”)(我不关心日期格式,只想在1个查询中做到这一点) )。

使用UNION是唯一的解决方案,它是否具有最佳性能?

2 个答案:

答案 0 :(得分:1)

此处不需要UNION。只需选择where user1='Joe' OR user2='Joe'

即可

答案 1 :(得分:1)

联盟不是唯一的选择,你可以这样做:

select u.user
from users u
inner join friends f on u.user = case f.user1 when 'Joe' then f.user2 else f.user1 end
where f.user1 = 'Joe' or f.user2 = 'Joe'

这是否比联盟更快取决于几件事情,主要取决于你拥有的索引。