【问题标题】:Mysql subquery calculation (Error 1054)Mysql子查询计算(错误1054)
【发布时间】:2013-06-06 14:46:40
【问题描述】:

这就是我想做的(简化查询):

SELECT
 FOO.id,
 FOO.maxTickets,
 (SELECT COUNT(*) countx FROM barfoo BAR WHERE BAR.idt = FOO.id) buyTickets,
 (FOO.maxTickets - buyTickets) leftTickets
FROM
 foobar FOO
ORDER BY
 FOO.leftTickets ASC

但是当我这样做时,我有这个消息:

   #1054 - Unknown column 'buyTickets' in 'field list'

我很困惑。请帮帮我。

谢谢!

【问题讨论】:

    标签: mysql subquery mysql-error-1054


    【解决方案1】:

    此处未定义 buyTickets 列(别名而不是表列)。要么重复计数,要么使用内部查询:

    SELECT
        id,
        maxTickets,
        (SELECT COUNT(*) countx FROM barfoo BAR WHERE BAR.idt = FOO.id) buyTickets,
        (FOO.maxTickets - (SELECT COUNT(*) countx FROM barfoo BAR WHERE BAR.idt = FOO.id)) leftTickets
    FROM
        foobar FOO
    ORDER BY
        leftTickets ASC
    

    【讨论】:

    • 优秀。有效且简单。谢谢!
    • ORDER BY leftTickets,不是ORDER BY FOO.leftTickets
    【解决方案2】:

    您不能像这样使用您在选择列表中给出的别名,因为不知道 buyTickets 会在另一个计算中使用。解决此问题的一种方法是使用子查询:

    select id, 
        maxTickets, 
        buyTickets, 
        maxTickets - buyTickets as leftTickets
    from
    (
         SELECT FOO.id,
            FOO.maxTickets,
            (SELECT COUNT(*) countx 
                 FROM barfoo BAR WHERE BAR.idt = FOO.id) buyTickets
        FROM foobar FOO
    ) d
    ORDER BY leftTickets ASC
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-22
      • 2016-02-07
      • 1970-01-01
      • 1970-01-01
      • 2023-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多