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
4

2 回答 2

19

您需要为子查询提供别名,如下所示:

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 (子查询) [AS] 名称 ...

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

于 2014-12-23T11:04:16.953 回答
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; 
于 2014-12-23T11:04:34.087 回答