此查询从friendlist表中返回用户的好友记录,然后从user表中获取每个用户的记录。
选项#1
SELECT
f.status,
f.user_to_id,
f.user_from_id,
u.user_id,
u.registration_date,
u.nickname,
u.email
FROM ti_friend_list AS f
LEFT JOIN ti_user u
ON u.user_id = (CASE f.user_from_id
WHEN 7 THEN f.user_to_id
ELSE f.user_from_id END)
WHERE (f.user_from_id = 7
OR f.user_to_id = 7) 选项#2
SELECT
f.status,
f.user_to_id,
f.user_from_id,
u.user_id,
u.registration_date,
u.nickname,
u.email
FROM ti_friend_list AS f
LEFT JOIN ti_user u
ON u.user_id = f.user_to_id
WHERE f.user_from_id = 7
UNION ALL
SELECT
f.status,
f.user_to_id,
f.user_from_id,
u.user_id,
u.registration_date,
u.nickname,
u.email
FROM ti_friend_list AS f
LEFT JOIN ti_user u
ON u.user_id = f.user_from_id
WHERE f.user_to_id = 7哪一个是更优的解决方案。CASE与UNION的基本比较
发布于 2011-10-21 16:20:25
我像布莱恩一样思考:
您可以在查询中尝试"explain“命令,以查看引擎正在使用的计划。
发布于 2011-10-21 16:07:37
同时运行这两个命令,看看是否存在时差!
除此之外,我建议使用案例方法在未来的扩展意图和易用性方面是更清晰的,除非您发现明确的证据,否则我将使用它。在我的头顶上,我认为它会更快。
https://stackoverflow.com/questions/7846058
复制相似问题