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;
ドキュメント から、
SELECTステートメントのFROM句では、サブクエリは有効です。実際の構文は次のとおりです。
SELECT ... FROM(subquery)[AS] name.。
FROM句のすべてのテーブルには名前が必要であるため、[AS] name句は必須です。サブクエリ選択リストの列には、一意の名前を付ける必要があります。
はい、派生データのエイリアスを指定する必要があります
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;