Каждая производная таблица должна иметь свою собственную ошибку псевдонима. - PullRequest
16 голосов
/ 09 августа 2010

Я получаю эту ошибку при выполнении следующего запроса:

SELECT MAX( DateTime )
FROM (
(
    SELECT DateTime
    FROM Class_Searches
)
UNION ALL (
    SELECT DateTime
    FROM Book_Searches
)
)
WHERE User_Email = 'bla@blah.com'
AND DateTime > NOW( ) - INTERVAL 30 DAY 

Я знаю, что мне нужно добавить псевдонимы, но я не уверен, где

Ответы [ 2 ]

18 голосов
/ 09 августа 2010

Вам нужен псевдоним для подзапроса, и вы должны применить условия либо к обоим запросам, которые вы объединяете:

SELECT MAX(DateTime)
FROM (

  SELECT DateTime
  FROM Class_Searches
  WHERE User_Email = 'bla@blah.com'
  AND DateTime > NOW( ) - INTERVAL 30 DAY

  UNION ALL

  SELECT DateTime
  FROM Book_Searches
  WHERE User_Email = 'bla@blah.com'
  AND DateTime > NOW( ) - INTERVAL 30 DAY

) AS x

или верните данные, чтобы можно было применить условие во внешнем запросе:

SELECT MAX(DateTime)
FROM (

  SELECT DateTime, User_Email
  FROM Class_Searches

  UNION ALL

  SELECT DateTime, User_Email
  FROM Book_Searches

) AS x
WHERE User_Email = 'bla@blah.com'
AND DateTime > NOW( ) - INTERVAL 30 DAY
1 голос
/ 09 августа 2010

Псевдоним - это когда вы переименовываете что-то, например SELECT t.time from table t, t - это псевдоним для этой таблицы.В этом случае вам нужно присвоить псевдоним таблицам, сгенерированным подзапросами:

SELECT MAX( ut.DateTime )
FROM (
(
    SELECT DateTime
    FROM Class_Searches
) cs
UNION ALL (
    SELECT DateTime
    FROM Book_Searches
) bs
) ut
WHERE User_Email = 'bla@blah.com'
AND ut.DateTime > NOW( ) - INTERVAL 30 DAY 

Это все равно не будет работать, поскольку у вас нет столбца User_Email, возвращенного из UNION.Таким образом, попробуйте:

SELECT MAX( ut.DateTime )
FROM (
(
    SELECT DateTime, User_Email
    FROM Class_Searches
) cs
UNION ALL (
    SELECT DateTime, User_Email
    FROM Book_Searches
) bs
) ut
WHERE ut.User_Email = 'bla@blah.com'
AND ut.DateTime > NOW( ) - INTERVAL 30 DAY

Возможно, что это все еще не будет работать правильно из-за синтаксиса UNION, но по крайней мере это намного ближе.

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