【问题标题】:Subquery on MySQLMySQL中的子查询
【发布时间】:2015-11-16 17:58:47
【问题描述】:

我知道这可能是一个重复的问题,但我无法思考,也找不到合适的例子。

我正在尝试创建一个子查询,从表中选择 id 为 x、y 或 z 的元素,并从该选择中选择区域为 xx、yy 或 zz 的元素。

那就是查询:

SELECT * FROM establecimientos 
INNER JOIN subtipos ON (establecimientos.subtipos_idsubtipo = subtipos.idsubtipo) 
WHERE subtipos_idsubtipo = 11  OR  subtipos_idsubtipo = 12  OR  subtipos_idsubtipo = 13  OR  subtipos_idsubtipo = 14 
AND zonas_idzona in 
(SELECT * FROM establecimientos 
WHERE zonas_idzona = 2  OR zonas_idzona = 3  OR zonas_idzona = 4  OR zonas_idzona = 5  OR zonas_idzona = 6  OR zonas_idzona = 7  OR zonas_idzona = 8)
LIMIT 0, 90

但我收到错误only a single result allowed for a SELECT that is part of an expression

我很头疼!谢谢!

【问题讨论】:

    标签: mysql sql select subquery inner-join


    【解决方案1】:

    这是

    ... zonas IN (SELECT * FROM ...)
                         ^---here
    

    子查询为每个结果行返回 MULTIPLE 字段,这意味着数据库完全不知道应该使用哪些字段与 zonas 进行比较。

    改成

    ... zonas IN (SELECT specific_field FROM ...)
                          ^^^^^^^^^^^^^^---changed
    

    改为。

    【讨论】:

      【解决方案2】:

      您需要更新子查询以仅提取您将使用的字段。

      改变这个:

      SELECT * FROM establecimientos 
      WHERE zonas_idzona = 2  OR zonas_idzona = 3  OR zonas_idzona = 4  OR zonas_idzona = 5  OR zonas_idzona = 6  OR zonas_idzona = 7  OR zonas_idzona = 8
      

      到:

      SELECT <Field Name> FROM establecimientos 
      WHERE zonas_idzona = 2  OR zonas_idzona = 3  OR zonas_idzona = 4  OR zonas_idzona = 5  OR zonas_idzona = 6  OR zonas_idzona = 7  OR zonas_idzona = 8
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-18
        • 2012-09-03
        • 1970-01-01
        • 1970-01-01
        • 2015-09-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多