You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 09:35:33