【问题标题】:SQL error: #1242 - Subquery returns more than 1 rowSQL 错误:#1242 - 子查询返回多于 1 行
【发布时间】:2013-02-04 06:44:07
【问题描述】:

我在尝试执行此查询时收到“错误:#1242 - 子查询返回超过 1 行”:

SELECT id FROM postcodes WHERE pcd LIKE (SELECT CONCAT(pcd,' %') FROM towns WHERE id IN (31898,12828,15771,7604))

您对此查询有什么建议吗?

【问题讨论】:

    标签: php mysql sql


    【解决方案1】:

    JOIN 两个表而不是IN 谓词,像这样:

    SELECT p.id 
    FROM postcodes p
    INNER JOIN towns t ON p.pcd LIKE CONCAT(t.pcd,' %')
    WHERE t.id IN (31898,12828,15771,7604);
    

    【讨论】:

      【解决方案2】:

      检查这个查询:

      SELECT CONCAT(pcd,' %') FROM towns WHERE id IN (31898,12828,15771,7604)
      

      也许它的结果不止一行。

      或者你可以限制子查询结果。

      SELECT id FROM postcodes WHERE pcd LIKE (SELECT CONCAT(pcd,' %') FROM towns WHERE id IN (31898,12828,15771,7604) LIMIT 1)
      

      【讨论】:

      • 其实我不想限制,如果我想限制这些结果我不会使用 IN 声明!我可以分别为这些 id 中的每一个执行此查询,但效率不高我想知道是否有可以执行此 SELECT 的有效查询。
      【解决方案3】:

      您必须将子查询限制为一行。您应该添加一些过滤器以将结果限制为一行,或者将LIMIT 1 添加到您的子查询中会为您解决问题。

      【讨论】:

      • 其实我不想限制,如果我想限制这些结果,我不会使用 IN 声明!我可以分别为这些 id 中的每一个执行此查询,但效率不高我想知道是否有可以执行此 SELECT 的有效查询。
      猜你喜欢
      • 2018-08-06
      • 1970-01-01
      • 1970-01-01
      • 2016-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多