0

これは私がやりたいことです(簡略化されたクエリ):

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'

私は混乱しています。私を助けてください。

ありがとう !

4

2 に答える 2

3

そのような選択リストで指定したエイリアスを使用することはできません。その結果、buyTickets別の計算で使用されることが知られていません。これを修正する 1 つの方法は、サブクエリを使用することです。

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
于 2013-06-06T14:49:58.640 に答える
3

列 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
于 2013-06-06T14:51:51.653 に答える