我有一个返回多行的查询,另一个查询,其中我想将条件设置为这些多行中的值之一,所以基本上我希望子查询看起来像这样:
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)
你可以使用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)
对于性能而言,连接永远不是更糟糕的选择,并且根据您使用的确切情况和数据库,可以提供更好的性能.