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 に答える