簡體   English   中英

Union 與內連接,mysql 錯誤

[英]Union with inner join, mysql error

(SELECT * 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')
LIMIT 12

錯誤:

#1222 - The used SELECT statements have a different number of columns

在 new_apps 上,有些字段不在 app_detailsvvv 中,我如何才能以某種方式屏蔽聯合中的第二個查詢。

編輯:

(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') LIMIT 12

當我添加ORDER BY new_apps.top ASC我收到這個新錯誤:

#1250 - Table 'new_apps' from one of the SELECTs cannot be used in global ORDER clause

我不認為你需要一個union ,只需要一個left outer join

SELECT dtable.*
FROM app_detailsvvv as dtable LEFT OUTER JOIN
     new_apps
     ON new_apps.trackId = dtable.trackId and
        composed = '1' AND new_apps.top > 0
WHERE dtable.primaryGenreName = 'Games'
LIMIT 12;

嗯,這可能會返回重復項,您可以使用select distinct dtable.*擺脫這些重復項。

可是等等。 除了返回第一個表中的所有行之外,這個查詢實際上沒有做任何事情。 我懷疑您想返回 12 行,優先考慮匹配的行。 如果是這種情況,那么您想要的查詢是:

SELECT dtable.*
FROM app_detailsvvv as dtable LEFT OUTER JOIN
     new_apps
     ON new_apps.trackId = dtable.trackId
WHERE dtable.primaryGenreName = 'Games'
GROUP BY dtable.trackId   <-- or whatever the unique id is on the table
ORDER BY (composed = '1' AND new_apps.top > 0) desc
LIMIT 12;

嘗試這個:

(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')
LIMIT 12

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM