搜索

首页  >  问答  >  正文

如何解决"subquery returns more than 1 row"错误

<p>我有一个返回多行的查询,还有另一个查询,我想设置条件为这些多行中的任何一个值,所以基本上我希望子查询看起来像这样:</p> <pre class="brush:php;toolbar:false;">select * from table where id= (多行查询);</pre> <p>其中<code>多行查询</code>返回多行。所以如果这些行的值是1、2、3,那么我希望将id设置为1或2或3。</p>
P粉235202573P粉235202573462 天前510

全部回复(2)我来回复

  • P粉310754094

    P粉3107540942023-08-22 13:21:55

    您可以使用in()

    select * 
    from table
    where id in (多行查询)

    或者使用连接:

    select distinct t.* 
    from source_of_id_table s
    join table t on t.id = s.t_id
    where <source_of_id_table的条件>

    连接在性能方面从不是一个更糟糕的选择,并且根据具体情况和您使用的数据库,可能会提供更好的性能。

    回复
    0
  • P粉386318086

    P粉3863180862023-08-22 09:08:13

    = 可以用于子查询返回只有一个值的情况。

    当子查询返回多个值时,您需要使用 IN

    select * 
    from table
    where id IN (multiple row query);

    例如:

    SELECT *
    FROM Students
    WHERE Marks = (SELECT MAX(Marks) FROM Students)   --子查询只返回一个值
    
    SELECT *
    FROM Students
    WHERE Marks IN 
          (SELECT Marks 
           FROM Students 
           ORDER BY Marks DESC
           LIMIT 10)                       --子查询返回10个值

    回复
    0
  • 取消回复