1

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

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

我想找到在过去 30 天内登录的用户(比如“Joe”)的所有朋友(我不关心日期格式,只是希望能够在 1 个查询中完成)。

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

4

2 回答 2

1

UNION这里不需要A。只需选择where user1='Joe' OR user2='Joe'

于 2012-06-30T23:22:44.020 回答
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'

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

于 2012-06-30T23:25:38.137 回答