首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL查询,(从子查询访问主查询)

MySQL查询,(从子查询访问主查询)
EN

Stack Overflow用户
提问于 2014-03-28 11:34:16
回答 1查看 59关注 0票数 0

我有一个问题,在子查询中我需要一个WHERE子句,这个子句依赖于主查询的结果,否则我的结果就会出错,查询需要太长时间/无法执行。

我需要这个查询来创建搜索服务器所需的视图的情况支持这样的问题:我不能将其拆分为两个查询,也不能用脚本动态地处理它。

以下查询会出现此问题:

代码语言:javascript
复制
    SELECT `s`.`id` AS `seminar_id`, (SUM( `sub`.`seminar_rate` ) / COUNT( `sub`.`seminar_id` )) AS `total_rate`
    FROM
    (
        SELECT (SUM( value ) / COUNT( * )) AS `seminar_rate` , `r`.`seminar_id`
        FROM `rating` r
        INNER JOIN `rating_item` ri ON `r`.`id` = `ri`.`rating_id`
        WHERE `r`.`seminar_id` = `s`.`id`/* <- Here is my problem, this is inacessible */
        GROUP BY `r`.`seminar_id`
    ) AS sub,
    `seminar` s
    INNER JOIN `date` d
    ON `s`.`id` = `d`.`seminar_id`
    INNER JOIN `date_unit` du
    ON `d`.`id` = `du`.`date_id`        
    LEFT JOIN `seminar_subject` su
    ON `s`.`id` = `su`.`seminar_id`
    LEFT JOIN `subject` suj
    ON `su`.`subject_id` = `suj`.`id`
    INNER JOIN `user` u
    ON `s`.`user_id` = `u`.`id`
    INNER JOIN `company` c
    ON `u`.`company_id` = `c`.`id`
    GROUP BY `du`.`date_id`, `sub`.`seminar_id`

此查询应从每次研讨会的评分中计算出总比率。但是,我的评等存储在我的“评等”表中,应该实时处理。

(Sidenote:如果您想知道所有的联接:这个查询有更多的SELECT‘’ed字段,我只是删除它们,因为它们不是解决问题和使查询看起来不那么复杂,我知道它仍然是>.>.)

原因是我希望这个结果稍后可以通过我的搜索引擎进行排序,这取决于用户排序参数,这就是为什么我在这个查询中需要它。

问题本身是很明显的:错误1054 (42S22):'where子句‘中未知列's.id’

子subselect不知道主查询的结果,有没有解决方案来绕过这个问题?

有人能给我个提示让它起作用吗?

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-28 11:50:33

使用JOIN中的子查询,您可以消除WHERE子句并实现几乎相同的结果。这是您修改过的查询。希望这能解决你的问题。

代码语言:javascript
复制
SELECT `s`.`id` AS `seminar_id`, (SUM( `sub`.`seminar_rate` ) / COUNT( `sub`.`seminar_id` )) AS `total_rate`
FROM `seminar` s
INNER JOIN
(
    SELECT (SUM( value ) / COUNT( * )) AS `seminar_rate` , `r`.`seminar_id`
    FROM `rating` r
    INNER JOIN `rating_item` ri ON `r`.`id` = `ri`.`rating_id`
    /*WHERE `r`.`seminar_id` = `s`.`id` <- Here is my problem, this is inacessible */
    GROUP BY `r`.`seminar_id`
) AS sub ON s.id = sub.`seminar_id`
INNER JOIN `date` d
ON `s`.`id` = `d`.`seminar_id`
INNER JOIN `date_unit` du
ON `d`.`id` = `du`.`date_id`        
LEFT JOIN `seminar_subject` su
ON `s`.`id` = `su`.`seminar_id`
LEFT JOIN `subject` suj
ON `su`.`subject_id` = `suj`.`id`
INNER JOIN `user` u
ON `s`.`user_id` = `u`.`id`
INNER JOIN `company` c
ON `u`.`company_id` = `c`.`id`
GROUP BY `du`.`date_id`, `sub`.`seminar_id`
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22711720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档