当数据出现在某一行中时,如何选择所有行?

时间:2019-05-09 02:19:08

标签: sql sqlite

我有一个包含数据的表

    |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语句

2 个答案:

答案 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中的子查询不依赖于正在查看的当前行,因此它只需要被评估一次,这对于大型表来说可能更有效率。