Как выбрать все строки, когда данные находятся в одной из строк? - PullRequest
0 голосов
/ 09 мая 2019

У меня есть таблица с данными

    |FormID|Name|
       1      A
       1      B
       2      A
       2      C
       3      B
       3      C

Я пытаюсь запросить все строки, где появляется имя «A», однако я также хочу получить все строки с одинаковым FormID, когда имя встречается

Например, выберите * из таблицы, где name = 'A'

    resultset
  |FormID|Name|
     1      A
     2      A
     1      B
     2      C

Сейчас я просто запрашиваю значения FormID, где встречается имя, а затем выполняю другой запрос с номером FormID (Выбрать* из таблицы, где formID в (1,2)), но должен быть способ сделать это одним оператором sql

Ответы [ 2 ]

2 голосов
/ 09 мая 2019

Вы можете использовать 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 голос
/ 09 мая 2019

Другой подход:

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 не зависит от текущей просматриваемой строки, он должен оцениваться только один раз, что делает его потенциально более эффективным для больших таблиц.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...