2014-02-05 112 views
0
(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 

錯誤:在new_apps聯盟與內部聯接,MySQL錯誤

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

有場不在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 
+0

您的查詢沒有任何意義。它從'app_detailsvvv'表中選擇12個任意行,其中'primaryGenreName ='Games''。我懷疑你想要優先處理退貨,但是'union' *絕對會把行弄得亂七八糟。 –

+0

我想選擇頂部asc的順序,只有最上面的trackIds可用,如果沒有,用分頁運行,然後選擇app_detailsvvv – lbennet

+0

@ibennet。 。 。這就是我的答案中的查詢。這不是你的查詢所做的事情,即使固定爲'union'中的列數。 –

回答

0

試試這個:

(SELECT dtable * FROM app_detailsvvv作爲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作爲dtable WHERE primaryGenreName = '遊戲') LIMIT 12

+0

工作,現在當我添加︰ORDER BY new_apps.top ASC這個錯誤出來:從一個SELECT中的表'new_apps'不能在全局ORDER子句中使用 – lbennet

1

我不認爲你需要一個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;