mysql 错误表不能用于全局顺序子句

lbe*_*net 2 mysql union join

(SELECT dtable.* FROM app_detailsvvv as dtable INNER JOIN new_apps ON 
new_apps.trackId=dtable.trackId WHERE primaryGenreName='Games' AND composed='1' AND
new_apps.top>0) UNION (SELECT * FROM app_detailsvvv as dtable WHERE
primaryGenreName='Games') ORDER BY new_apps.top ASC, trackName ASC LIMIT 12
Run Code Online (Sandbox Code Playgroud)

使用该查询,我收到此错误:

#1250 - Table 'new_apps' from one of the SELECTs cannot be used in global ORDER clause
Run Code Online (Sandbox Code Playgroud)

new_apps 没有在第二个查询中使用,这个想法是从同一个表中获得最高排名,该表也在 new_apps 表中列出了 id

Mic*_*šna 5

正如文档所说

这种 ORDER BY 不能使用包含表名(即 tbl_name.col_name 格式的名称)的列引用。相反,在第一个 SELECT 语句中提供列别名并引用 ORDER BY 中的别名。

所以改写成这样

(
    SELECT dtable.*, new_apps.top as t1
    FROM app_detailsvvv as dtable
    INNER JOIN new_apps ON new_apps.trackId=dtable.trackId
    WHERE primaryGenreName='Games' AND composed='1' AND new_apps.top > 0
)
UNION
(
    SELECT *, 0
    FROM app_detailsvvv as dtable
    WHERE primaryGenreName='Games'
)
ORDER BY t1 ASC, trackName ASC
LIMIT 12
Run Code Online (Sandbox Code Playgroud)