Mysql join with subquery join 使用相关名称
Posted
技术标签:
【中文标题】Mysql join with subquery join 使用相关名称【英文标题】:Mysql join with subquery join with use of correlation names 【发布时间】:2015-02-19 18:18:33 【问题描述】:我尝试将 mysql 连接与子查询一起使用,子查询也有连接,所以我遇到了问题,请善待,因为我不是不试就问,我尽力解决但遇到语法错误这是因为相关名称 t1 和 t2
SELECT min(user_org.oid) as id, user_org_profiles.name from user_org
LEFT JOIN user_org_profiles ON (user_org.oid = user_org_profiles.oid) t1
INNER JOIN
(SELECT user_org_profiles.name, max(user_org.gid) as gid
FROM user_org LEFT JOIN user_org_profiles USING(oid)
WHERE user_org.gid IN (1,2]) AND active =1
group by name) t2 ON t1.name = t2.name AND t1.gid = t2.gid group by t1.name
遇到这个错误
1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在 ']) 和 active =1 group by name) ON t1.name = t2.name AND t1.gid = t2 附近使用正确的语法。在第 6 行
【问题讨论】:
您能否提供您的查询产生的错误详细信息 @MKhalidJunaid 我编辑了 users_org_profiles 上的别名应该紧跟在表名之后。(1,2])
中还有一个奇怪的括号。
SELECT min(user_org.oid) as id, t1.name from user_org LEFT JOIN user_org_profiles t1 ON user_org.oid = t1.oid
【参考方案1】:
修复了user_org_profiles
别名为t1
的问题以及IN
列表中的一个小错字。不过,这些错误与消息中报告的文字不太接近。
SELECT min(user_org.oid) as id, t1.name from user_org
LEFT JOIN user_org_profiles t1 ON (user_org.oid = t1.oid)
INNER JOIN
(SELECT user_org_profiles.name, max(user_org.gid) as gid
FROM user_org LEFT JOIN user_org_profiles USING(oid)
WHERE user_org.gid IN (1,2) AND active = 1
group by name) t2 ON t1.name = t2.name AND t1.gid = t2.gid group by t1.name
【讨论】:
现在出现错误 #1054 - 'on Clause' 中的未知列 'user_org_profiles.oid' 我在上面的评论中改变了这一点,但它并没有完全符合我的回答。别名后必须通过别名引用该表。以上是关于Mysql join with subquery join 使用相关名称的主要内容,如果未能解决你的问题,请参考以下文章
MySQL LEFT JOIN 或 WHERE IN SUBQUERY