错误代码:1248。每个派生表必须有自己的别名。查询没有找到解决方案。

11

在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

请参见 https://dev59.com/mHI-5IYBdhLWcg3wYXL8。 - That Brazilian Guy
2个回答

20

你需要为子查询提供一个别名,像这样:

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;

根据文档

在SELECT语句的FROM子句中使用子查询是合法的,实际语法为:

SELECT ... FROM (subquery) [AS] name ...

由于FROM子句中的每个表都必须有一个名称,所以[AS] name子句是强制性的。子查询选择列表中的任何列都必须具有唯一的名称。


谢谢 :) 它现在正在运行。只有一个与此问题无关的小查询要问。我想使用插入语句并将从此查询返回的数据存储到新表中。但不知道如何使用上面的选择语句进行插入。请帮助我。 - user1930857

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; 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接