选择连接中的mysql子查询

Posted

技术标签:

【中文标题】选择连接中的mysql子查询【英文标题】:mysql subquery in select join 【发布时间】:2015-10-10 19:59:01 【问题描述】:

我对以下语句有疑问:

SELECT SUM(foreseen_charges.commonCharge) as required, foreseen_charges.flatsId 
LEFT JOIN (SELECT deposits.flatsId FROM deposits GROUP BY flatsId) deps
ON foreseen_charges.flatsId = deps.flatsId
FROM foreseen_charges GROUP BY foreseen_charges.flatsId

我总是收到这个错误:

您的 SQL 语法有错误;检查相应的手册 到您的 mysql 服务器版本,以便在 'LEFT 附近使用正确的语法 JOIN (SELECT deposit.flatsId FROM deposit GROUP BY flatsId) deps 在第 2 行打开 f'

谁能帮帮我?

最好的问候, 铯

【问题讨论】:

【参考方案1】:

FROM 放在 LEFT JOIN

之前
SELECT SUM(foreseen_charges.commonCharge) as required, 
foreseen_charges.flatsId 
FROM foreseen_charges
LEFT JOIN (
    SELECT deposits.flatsId 
    FROM deposits 
    GROUP BY flatsId
) deps ON foreseen_charges.flatsId = deps.flatsId
GROUP BY foreseen_charges.flatsId

【讨论】:

请您指出为什么这样做可以使答案更有用。 @ShawnMehan 这是基本的加入。我认为我不应该解释为什么这会像 w3school 那样工作。 好吧,这就是我们在 SO 上所做的,帮助人们更好地编码。请参阅@redux 以获取更普遍有用的答案,该答案减少未来类似问题的数量,假设其他用户搜索和阅读....叹息....这是一个不同的问题。尽管如此,我不会对你投反对票,但 OP 应该将检查切换为 redux 答案恕我直言。【参考方案2】:

你做事不正常。大体结构是:

SELECT (something) FROM table JOIN other-table ON table.var1=other-table.var2 WHERE situation

你正在这样做:

SELECT (something) LEFT JOIN table ON table.var1=other-table.var2 FROM other-table 

在你声明两个表之前你不能加入,你不能关联 other-table 因为你还没有声明它。

不确定查询的目的是什么,但这应该可以解决您的语法错误:

SELECT SUM(foreseen_charges.commonCharge) as required, foreseen_charges.flatsId 
FROM foreseen_charges 
LEFT JOIN (SELECT deposits.flatsId FROM deposits GROUP BY flatsId) deps
ON foreseen_charges.flatsId = deps.flatsId
GROUP BY foreseen_charges.flatsId

【讨论】:

以上是关于选择连接中的mysql子查询的主要内容,如果未能解决你的问题,请参考以下文章

那个mysql 子查询和连接查询 一般常用哪个 谁效率高些

MySQL学习——SQL查询语句(连接查询&子查询)

mysql - 子查询和连接

mysql中,如何向测试人员介绍连接查询和子查询的优劣势?

子选择或连接?有没有更好的方法来编写这个 mysql 查询?

如何正确使用连接/子查询从多个表中选择数据? (PHP-MySQL)