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