如何进行引用结果集中其他行的查询?

cbeh67ev  于 2021-07-29  发布在  Java
关注(0)|答案(2)|浏览(322)

最好用一个例子来问这个问题。
我有一张table

id   |    name      |   attr
1    |     foo      |     a
2    |     bar      |     a    
3    |     baz      |     b

我想要一个问题 give me all the rows which share the same attr as 'name==foo' ,从而返回

id   |    name      |   attr
1    |     foo      |     a
2    |     bar      |     a

因为foo有attr=a,bar也有

3xiyfsfu

3xiyfsfu1#

你可以用 exists :

select t.*
from mytable t
where exists (
    select 1 from mytable t1 where t1.attr = t.attr and t1.name = 'foo'
)

请注意,如果 'foo' 有多个属性。
为了提高性能,您需要一个索引 (attr, name) .

k10s72fa

k10s72fa2#

一种简单的方法是关联子查询:

select t.*
from t
where t.attr = (select t2.attr from t t2 where t.name = 'foo');

相关问题