"子查询返回超过1行"错误的解决方案

wdc*_*wdc 27 mysql

我有一个返回多行的查询,另一个查询,其中我想将条件设置为这些多行中的值之一,所以基本上我希望子查询看起来像这样:

select * 
from table
where id= (multiple row query);
Run Code Online (Sandbox Code Playgroud)

其中multiple row query返回多行.因此,如果这些行的值是1,2,3,那么我想将id设置为1或2或3.

Rag*_*ull 92

= 可以在子查询仅返回1个值时使用.

当子查询返回多于1个值时,您将不得不使用IN:

select * 
from table
where id IN (multiple row query);
Run Code Online (Sandbox Code Playgroud)

例如:

SELECT *
FROM Students
WHERE Marks = (SELECT MAX(Marks) FROM Students)   --Subquery returns only 1 value

SELECT *
FROM Students
WHERE Marks IN 
      (SELECT Marks 
       FROM Students 
       ORDER BY Marks DESC
       LIMIT 10)                       --Subquery returns 10 values
Run Code Online (Sandbox Code Playgroud)


Boh*_*ian 7

你可以使用in():

select * 
from table
where id in (multiple row query)
Run Code Online (Sandbox Code Playgroud)

或使用联接:

select distinct t.* 
from source_of_id_table s
join table t on t.id = s.t_id
where <conditions for source_of_id_table>
Run Code Online (Sandbox Code Playgroud)

对于性能而言,连接永远不是更糟糕的选择,并且根据您使用的确切情况和数据库,可以提供更好的性能.