【发布时间】:2016-05-11 14:59:40
【问题描述】:
使用此查询:
SELECT
`id`,
`type`,
`subtype`,
`title`,
`shortdesc`,
(SELECT COUNT(*)
FROM `story_comments`
WHERE `parent_id` = t1.`id`) as comments,
(SELECT
(ROUND( (
SELECT (SUM(`rating` * `count`) / SUM(`count`) ) ) * 2) ) / 2 as result
FROM
(SELECT rating, COUNT(*) as count
FROM `story_ratings` WHERE `parent_id` = t1.`id`
GROUP BY rating) as val) as rating,
`calls`,
`user`
FROM
`storys` t1
WHERE
`open` = 1 AND
`modremove` = 0 AND
`modblock` = ''
ORDER BY
`opening`
DESC LIMIT 16;
我收到此错误:#1054 - 'where 子句'中的未知列't1.id',这是由子查询中的子查询引起的(FROM 之后的子查询)。
但第一个子查询中的t1.id 工作正常。为什么我不能在 FROM 子查询中使用它?我也尝试了变量,但也没有用:
SELECT @i := `id` id, `type`, `subtype`, `title`, `shortdesc`, (SELECT COUNT(*) FROM `story_comments` WHERE `parent_id` = t1.`id`) as comments,
(SELECT (ROUND( (SELECT (SUM(`rating` * `count`) / SUM(`count`) ) ) * 2) ) / 2 as result FROM (SELECT rating, COUNT(*) as count FROM `story_ratings` WHERE `parent_id` = @i GROUP BY rating) as val) as rating,
`calls`, `user` FROM `storys` t1 WHERE `open` = 1 AND `modremove` = 0 AND `modblock` = '' ORDER BY `opening` DESC LIMIT 16;
使用@i 变量,结果每行都返回NULL,这是怎么回事。
【问题讨论】:
-
也许看看通用表表达式 (CTE),它可能有助于清理你的 SQL。
-
能否请您替换查询中的每个 `to ' 实例,使其正常工作?
-
@DavidSöderlund 反引号是 MySQL 的引用标识符。这些应该是名称,而不是字符串,并且在 MySQL 中它应该可以正常工作,即使它很丑陋(IMO)
-
我明白了,我想的也差不多。很困惑,因为这个问题也被标记为 sql-server。
-
反引号运行良好。