MariaDB查询在线好友SQL语法报错问题求助
解决在线好友列表查询的语法错误及空结果兼容问题
你的语法错误并非子查询返回空结果导致,而是IN子句中对UNION查询的括号使用有误——给第一个SELECT单独套了多余的括号,导致MariaDB无法正确解析UNION语法。
修正后的SQL写法一(IN子句)
SELECT user_sid FROM users WHERE users.user_status > 0 AND users.user_sid IN ( SELECT user_sid FROM friends WHERE user2_sid = '5604075088818445472' AND type=1 UNION SELECT user2_sid FROM friends WHERE user_sid = '5604075088818445472' AND type=1 ) LIMIT 20 OFFSET 0
性能更优的JOIN写法
如果数据量较大,用JOIN替代IN子句通常性能更好:
SELECT DISTINCT u.user_sid FROM users u JOIN ( SELECT user_sid AS friend_sid FROM friends WHERE user2_sid = '5604075088818445472' AND type=1 UNION SELECT user2_sid AS friend_sid FROM friends WHERE user_sid = '5604075088818445472' AND type=1 ) f ON u.user_sid = f.friend_sid WHERE u.user_status > 0 LIMIT 20 OFFSET 0
额外优化提示
- 若确定好友关系不会重复存储(比如双向好友只存一条记录),可以用
UNION ALL替代UNION,省去自动去重的开销,提升查询速度。 - 两种写法都兼容无好友的场景:当没有匹配的好友记录时,查询会返回0行,不会抛出语法错误。
内容的提问来源于stack exchange,提问作者Dico Sky
相关产品推荐
相关产品推荐

