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

将这些 DB2 SUBQUERY 重写为 Join

Hibernate Criteria:在 Subquery/DetachedCriteria 中执行 JOIN

MySQL JOIN Summary

MYSQL 优化

Swift NSPredicate SUBQUERY with NOT IN?