(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
正如文档所说
这种 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)