【问题标题】:Select result of the subquery选择子查询的结果
【发布时间】:2014-02-04 04:15:28
【问题描述】:

我正在尝试选择 q1.res,这将是 FROM 子查询的结果:

    (SELECT SUM(gwr.res1)/(COUNT(*)*1000) as 'res' 
     FROM process.gwr 
     WHERE started = 1 AND gwr.user2 = g.id AND gwr.loss = g.id) AS q1

问题是我试图在子查询中选择g.id,但由于某种原因它无法访问它并返回错误消息:

[Err] 1054 - Unknown column 'g.id' in 'where clause'

这没有意义,因为 g.id(grand.idid 列)

SELECT
    g.name, g.point, g.mx, q1.res
FROM
    (SELECT SUM(gwr.res1)/(COUNT(*)*1000) as 'res' 
     FROM process.gwr 
     WHERE (started = 1) AND (gwr.user2 = g.id) AND (gwr.loss = g.id)) AS q1, grand g
LEFT JOIN process.users p ON (p.id = g.owner)
WHERE
    p.name != ""
ORDER BY
    g.point DESC,
    g.mx DESC
LIMIT 5

问题出在哪里?

【问题讨论】:

  • 是子查询执行正常还是你得到同样的错误?
  • @Milen Pavlov 它不会执行,因为我正在尝试使用主查询的 g.id。

标签: mysql sql subquery mysql5


【解决方案1】:

尝试从子查询的“res”中删除“”。

SELECT
    g.name, g.point, g.mx, q1.res
FROM
    (SELECT SUM(gwr.res1)/(COUNT(*)*1000) as res FROM process.gwr WHERE started = 1 AND gwr.user2 = g.id AND gwr.loss = g.id) AS q1, grand g
LEFT JOIN process.users p ON (p.id = g.owner)
WHERE
    p.name != ""
ORDER BY
    g.point DESC,
    g.mx DESC
LIMIT 5

【讨论】:

    【解决方案2】:

    您需要提及数据库对象“g”所指的内容。意思是,您需要将其指定为“FROM”部分中的表(或视图),或者作为纯粹的交叉引用,或者 - 如果你觉得舒服 - 然后使用某种连接。

    例如

    SELECT SUM(gwr.res1)/(COUNT(*)*1000) as 'res' 
    FROM process.gwr, process.g 
    WHERE started = 1 
        AND gwr.user2 = g.id 
        AND gwr.loss = g.id 
    

    注意“FROM”部分中的“process.g”。

    希望有所帮助。

    K

    【讨论】:

    • 这将选择process.g 的第一个g.id。我希望它使用主查询的g.id
    • 对。由于您在主查询(外部查询)中引用表“grand”,因此您不能在内部子查询中引用 g。因此,您的选择是要么从内部删除 where 子句并坚持主查询 where 子句,要么在内部查询中将表 grand 引用为 g(并从外部将其删除)。
    猜你喜欢
    • 1970-01-01
    • 2016-01-22
    • 1970-01-01
    • 2020-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-07
    • 1970-01-01
    相关资源
    最近更新 更多