【问题标题】:Union with inner join, mysql error内部连接联合,mysql错误
【发布时间】:2014-02-05 23:24:20
【问题描述】:
(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

【问题讨论】:

  • 您的查询实际上没有意义。它从app_detailsvvv 表中选择12 个任意行,其中primaryGenreName='Games'。我怀疑您想优先考虑退货,但union 肯定会混淆行。
  • 我想按 top asc 选择 order,其中只有 top trackIds 可用,如果没有,用分页用完然后在 app_detailsvvv 上选择
  • @ibennet 。 . .这就是我回答中的查询所做的。这不是您的查询所做的,即使对于 union 中的列数是固定的。

标签: mysql join union


【解决方案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;

【讨论】:

    【解决方案2】:

    试试这个:

    (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 出现此错误:来自 SELECT 之一的表 'new_apps' 不能用于全局 ORDER 子句
    猜你喜欢
    • 1970-01-01
    • 2015-09-21
    • 1970-01-01
    • 1970-01-01
    • 2013-01-20
    • 1970-01-01
    • 2021-08-13
    • 2014-10-26
    • 1970-01-01
    相关资源
    最近更新 更多