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

MySQL多表查询求助:查询关联账号时出现SQL语法错误

解决MySQL关联查询语法错误及正确查询语句

原SQL的语法错误点

  • DISTINCT关键字位置错误:原语句id(distinct FRIENDS.ID)不符合MySQL语法,DISTINCT需放在查询字段前,正确写法是SELECT DISTINCT 字段名。
  • JOIN关联条件无效:FRIENDS.ACC IN (FRIENDS.ACC, FRIENDS.CONTO)这个条件永远为真,没有建立FRIENDS和USERS表的有效关联,无法关联到用户账号信息。
  • WHERE条件注释错误:#USER会将后续的FT11 IN (FRIENDS.ACC, FRIENDS.CONTO)全部注释,导致WHERE子句不完整,触发语法错误。

正确的查询语句

根据你的需求(找出与账号FT11关联的账号,并关联USERS表信息),可以用两种方式实现:

方式一:使用CASE语句关联

SELECT DISTINCT u.USER_ACC, u.NAME
FROM FRIENDS f
JOIN USERS u ON u.USER_ACC = CASE 
    WHEN f.ACC = 'FT11' THEN f.CONTO 
    ELSE f.ACC 
END
WHERE 'FT11' IN (f.ACC, f.CONTO);

方式二:使用UNION拆分查询

SELECT u.USER_ACC, u.NAME
FROM FRIENDS f
JOIN USERS u ON u.USER_ACC = f.CONTO
WHERE f.ACC = 'FT11'
UNION
SELECT u.USER_ACC, u.NAME
FROM FRIENDS f
JOIN USERS u ON u.USER_ACC = f.ACC
WHERE f.CONTO = 'FT11';

语句说明

  • 两种方式都会返回与FT11关联的账号信息(示例中为FT33,KEN)。
  • 方式一通过CASE判断,当FT11在ACC字段时取CONTO的账号,反之取ACC的账号,再关联到USERS表。
  • 方式二拆分两种场景(FT11作为发起方、FT11作为接收方),用UNION合并结果并自动去重。

内容的提问来源于stack exchange,提问作者mich kent

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 18:43:26