Каждая производная таблица должна иметь свою собственную ошибку псевдонима

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

SELECT MAX( DateTime )
FROM (
(
    SELECT DateTime
    FROM Class_Searches
)
UNION ALL (
    SELECT DateTime
    FROM Book_Searches
)
)
WHERE User_Email = '[email protected]'
AND DateTime > NOW( ) - INTERVAL 30 DAY 

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

Ответы

Ответ 1

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

SELECT MAX(DateTime)
FROM (

  SELECT DateTime
  FROM Class_Searches
  WHERE User_Email = '[email protected]'
  AND DateTime > NOW( ) - INTERVAL 30 DAY

  UNION ALL

  SELECT DateTime
  FROM Book_Searches
  WHERE User_Email = '[email protected]'
  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 = '[email protected]'
AND DateTime > NOW( ) - INTERVAL 30 DAY

Ответ 2

Псевдоним - это когда вы переименовываете что-то, например 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 = '[email protected]'
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 = '[email protected]'
AND ut.DateTime > NOW( ) - INTERVAL 30 DAY

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