我有一个问题,在子查询中我需要一个WHERE子句,这个子句依赖于主查询的结果,否则我的结果就会出错,查询需要太长时间/无法执行。
我需要这个查询来创建搜索服务器所需的视图的情况支持这样的问题:我不能将其拆分为两个查询,也不能用脚本动态地处理它。
以下查询会出现此问题:
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不知道主查询的结果,有没有解决方案来绕过这个问题?
有人能给我个提示让它起作用吗?
提前谢谢。
发布于 2014-03-28 11:50:33
使用JOIN中的子查询,您可以消除WHERE子句并实现几乎相同的结果。这是您修改过的查询。希望这能解决你的问题。
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`https://stackoverflow.com/questions/22711720
复制相似问题