Псевдоним не работает с условием IF в MYSQL

Я пишу запрос mysql и получаю ошибку.

"Неизвестный столбец 'dat' в 'списке полей'"

Эта ошибка возникла из-за использования псевдонима в условии IF в mysql.

Вот запрос mysql:

SELECT 
    nCustomerID,
    dDateRegistered,
    (select count(nPlayerID) from credit_logs 
        where nPlayerID=nCustomerID) as total_clog,
    (select count(nPlayerID) FROM bl_transaction_history
        where nPlayerID=nCustomerID) as total_tran,
    (select count(nCustomerID) from customer_freeplays
        where nCustomerID=nCustomerID) as total_free,
    (select dDateAdded from bl_transaction_history
        where nPlayerID=nCustomerID) as dat,
    (select DATEDIFF(now(),dat)/30 ) as date_differece1,
    (select DATEDIFF(now(),dDateRegistered)/30 ) as date_difference2,
    IF (dat IS NOT NULL,(select DATEDIFF(now(),dat)/30 ),
        (select DATEDIFF(now(),dDateRegistered)/30 )) as date_difference
FROM bl_customers
WHERE nAccountStatus=1 
  and bDeleted=0 
having total_clog>0 
    or total_tran>0 
    or total_free>0

Любая помощь будет оценена .. :)

Заранее спасибо.


person Sanjay Khatri    schedule 05.05.2012    source источник
comment
Вероятно, where nCustomerID=nCustomerID нуждается в исправлении.   -  person ypercubeᵀᴹ    schedule 05.05.2012


Ответы (1)


Вы не можете использовать столбцы-псевдонимы в выбранных вами других столбцах. Вам нужно будет снова и снова копировать всю часть запроса, для которого вы создаете псевдоним. т.е. замените все вхождения dat после вашего первоначального объявления на (выберите dDateAdded из bl_transaction_history, где nPlayerID = nCustomerID)

person Bryan    schedule 05.05.2012
comment
@Sanjay: вы не можете использовать псевдоним столбца в другом вычислении столбца или в предложении WHERE. См. мой ответ здесь: Использование столбца выражения case в предложении where для другого обходного пути. - person ypercubeᵀᴹ; 05.05.2012