我有一个包含数据的表
|FormID|Name|
1 A
1 B
2 A
2 C
3 B
3 C
我正在尝试查询名称为“ A”的所有行,但是我也想在出现名称时获取具有相同FormID的所有行
例如 从名称='A'的表中选择*
resultset
|FormID|Name|
1 A
2 A
1 B
2 C
现在,我只是在查询出现名称的FormID值,然后使用FormID号(在(1,2)中的formID中从表中选择*)再次进行查询,但是必须有一种方法可以在一条sql语句
答案 0 :(得分:2)
您可以使用exists
:
select t.*
from t
where t.name = 'A' or
exists (select 1
from t t2
where t2.formid = t.formid and t2.name = 'A'
);
实际上,第一个条件不是必需的,因此满足:
select t.*
from t
where exists (select 1
from t t2
where t2.formid = t.formid and t2.name = 'A'
);
答案 1 :(得分:1)
另一种方法:
SELECT formid, name
FROM forms
WHERE formid IN (SELECT formid FROM forms WHERE name = 'A')
ORDER BY name;
给予
formid name
---------- ----------
1 A
2 A
1 B
2 C
由于IN
中的子查询不依赖于正在查看的当前行,因此它只需要被评估一次,这对于大型表来说可能更有效率。