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
相关产品推荐
相关产品推荐

