Сгенерированный столбец недействителен - PullRequest
1 голос
/ 04 ноября 2011

У меня довольно простой оператор SQL, чтобы получить некоторые результаты из пары таблиц.Один из столбцов генерируется из встроенного оператора SQL.Хотя я, кажется, могу упорядочить по этому столбцу, попытка фильтрации с ним говорит, что столбец является недействительным.Вот мой код и ошибка:

SELECT 
        e.Title as Title,
        -- Get earliest start time and latest end time
        (SELECT TOP 1 l.StartTime FROM Locations l WHERE l.EventID = e.EventID ORDER BY l.StartTime ASC) as EarliestStartTime,
        (SELECT TOP 1 l.EndTime FROM Locations l WHERE l.EventID = e.EventID ORDER BY l.EndTime DESC) as LatestEndTime

    FROM
        Events e
    WHERE
            e.UserID = @UserID
        AND LatestEndTime < DATEADD(DAY, GETDATE(), 1)
    ORDER BY
        EarliestStartTime ASC

Ошибка:

Invalid column name 'LatestEndTime'.

Если я удаляю AND LatestEndTime < DATEADD(DAY, GETDATE(), 1), то оператор работает отлично.

Ответы [ 2 ]

6 голосов
/ 04 ноября 2011

Нельзя ссылаться на столбцы по псевдониму в предложении where.Либо запишите его, повторив определение столбца:

WHERE  e.UserID = @UserID
       AND (SELECT TOP 1 l.EndTime FROM Locations l 
            WHERE l.EventID = e.EventID ORDER BY l.EndTime DESC) < 
            DATEADD(DAY, GETDATE(), 1)

, либо используйте подзапрос для имени столбца:

select  *
from    (
        select  e.Title as Title,
                -- Get earliest start time and latest end time
                (SELECT TOP 1 l.StartTime FROM Locations l
                 WHERE l.EventID = e.EventID ORDER BY l.StartTime ASC)
                 as EarliestStartTime,
                (SELECT TOP 1 l.EndTime FROM Locations l
                 WHERE l.EventID = e.EventID ORDER BY l.EndTime DESC)
                 as LatestEndTime
        from    Events e
        ) as SubQuery
WHERE   UserID = @UserID
        and LatestEndTime < DATEADD(DAY, GETDATE(), 1)
0 голосов
/ 04 ноября 2011

Может попытаться использовать e.LatestEndTime

Похоже, что ваш запрос не может определить столбец LatestEndTime. Он либо не существует, либо MySQL просто проверяет ложную базу данных, поскольку вы использовали Locations l AND Events e в запросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...