Использование псевдонима столбца во внутреннем выделении в MySql - PullRequest
1 голос
/ 07 июня 2009

Кажется, я не могу создать псевдоним столбца и использовать его во внутреннем выделении в MySql. Как я могу сделать следующее в MySql, например?

SELECT NAME,ID AS M_ID FROM EMPLOYEES 
WHERE EXISTS (SELECT 1 FROM MANAGERS WHERE MANAGERID = M_ID)

MySql не распознает M_ID псевдоним!

Структура моей таблицы:

EMPLOYEES (ID,NAME) 
MANAGERS (MANAGERID,...)

Ответы [ 2 ]

5 голосов
/ 07 июня 2009

Либо просто используйте исходное имя столбца - это должно работать, пока в таблице MANAGERS нет столбца ID:

SELECT NAME, ID AS M_ID 
FROM EMPLOYEES 
WHERE EXISTS (
    SELECT 1 
    FROM MANAGERS 
    WHERE MANAGERID = ID
)

Или еще лучше, используйте псевдоним для таблиц:

SELECT e.NAME, e.ID AS M_ID 
FROM EMPLOYEES AS e
WHERE EXISTS (
    SELECT 1 
    FROM MANAGERS AS m
    WHERE m.MANAGERID = e.ID
)

Псевдонимы столбцов могут использоваться только в предложениях ORDER BY, GROUP BY и HAVING. Стандартный SQL не позволяет ссылаться на псевдоним столбца в предложении WHERE. Это ограничение наложено потому, что при выполнении кода WHERE значение столбца может еще не быть определено.

Кстати, использование подвыбора для данной проблемы может быть не лучшим решением. Хотя в этом простом случае я предполагаю, что оптимизатор запросов MySQL может найти простой способ в плане выполнения.

1 голос
/ 07 июня 2009

Что вы пытаетесь сделать? Похоже, это для всех сотрудников, где есть соответствующая запись в таблице менеджера?

Если это так, не могли бы вы использовать

SELECT
  e.name
, e.id
FROM
  employees AS e
  inner join managers AS m ON (e.id = m.managerid)
...