此查询从friendlist表返回用户朋友的记录,然后从用户表中获取每个用户的记录。
选项#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之间的比较
答案 0 :(得分:1)
同时运行它们,看看是否有时差!
除此之外,我建议使用CASE方法在未来的意图和易于扩展方面更清晰,除非您找到明确的证据,否则我会使用它。我认为它会更快。
答案 1 :(得分:0)
我想像Brian一样:
您可以在查询中尝试“解释”命令,以查看引擎正在使用的计划。