2014-02-05 114 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;