Вопрос:
Я получаю сообщение об ошибке при использовании этого запроса в MySQL.
Логика запроса верна, и я пробовал ее в Oracle, и она работает нормально, но я получаю сообщение об ошибке при работе в MySQL.
Я просмотрел предыдущие вопросы о StackOverflow, но не нашел что-то, чтобы помочь мне.
Вот запрос:
select * from (select PM.ID, PM.Name, PM.TIMEOUT, PMS.PROCESS_MONITOR_ID, PMS.PROCESS_START_DATE from RATOR_IMP.PROCESS_MONITOR as PM JOIN RATOR_IMP.PROCESS_MONITOR_STATISTIC as PMS ON PM.ID = PMS.PROCESS_MONITOR_ID WHERE PM.ENABLED=1 and (PM.NAME=’SDRRATINGENGINE11′ or PM.NAME=’WORKFLOWENGINE1′) order by PMS.PROCESS_START_DATE desc) limit 10000;
И вот ошибка:
Error Code: 1248. Every derived table must have its own alias No soultion found for query Лучший ответ:
Вам нужно предоставить псевдоним для подзапроса, например:
select * from (select PM.ID, PM.Name, PM.TIMEOUT, PMS.PROCESS_MONITOR_ID, PMS.PROCESS_START_DATE from RATOR_IMP.PROCESS_MONITOR as PM JOIN RATOR_IMP.PROCESS_MONITOR_STATISTIC as PMS ON PM.ID = PMS.PROCESS_MONITOR_ID WHERE PM.ENABLED=1 and (PM.NAME=’SDRRATINGENGINE11′ or PM.NAME=’WORKFLOWENGINE1′) order by PMS.PROCESS_START_DATE desc) as s limit 10000;
В документации,
Подзапросы являются законными в предложении FROM SELECT. Фактический синтаксис:
SELECT… FROM (подзапрос) [AS] name…
Предложение имени [AS] является обязательным, поскольку каждая таблица в предложении FROM должна иметь имя. Любые столбцы в списке выбора подзапроса должны иметь уникальные имена.
Ответ №1
Да вам нужно указать псевдоним для полученных данных
select x.* from (select PM.ID, PM.Name, PM.TIMEOUT, PMS.PROCESS_MONITOR_ID, PMS.PROCESS_START_DATE from RATOR_IMP.PROCESS_MONITOR as PM JOIN RATOR_IMP.PROCESS_MONITOR_STATISTIC as PMS ON PM.ID = PMS.PROCESS_MONITOR_ID WHERE PM.ENABLED=1 and (PM.NAME=’SDRRATINGENGINE11′ or PM.NAME=’WORKFLOWENGINE1′) order by PMS.PROCESS_START_DATE desc)x <— here limit 10000;