我有一个包含user1和user2列的friends表以及一个包含登录字段的users表。
朋友“pair”可以以任何方式存储,例如user1 = Joe和user2 = Dave,或者它可以是user1 = Dave和user2 = Joe,同样的事情。
我想找到过去30天内登录过的所有用户朋友(比如“Joe”)(我不关心日期格式,只想在1个查询中做到这一点) )。
使用UNION是唯一的解决方案,它是否具有最佳性能?
答案 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'
这是否比联盟更快取决于几件事情,主要取决于你拥有的索引。