Найти все записи, которые имеют конкретный c комментарий - PullRequest
2 голосов
/ 16 марта 2020

У меня есть существующий table1:

User   Comment  Group
---------------------
1      foo      a
2      bar      a
3      baz      b
4      123      a
5      bar      c
6      foo      d
7      654      a

Предположим, что мне нужно выбрать все User s с Comment foo

select * from [table1] t1 where t1.[Comment] = 'foo';

User   Comment   Group
---------------------
1      foo       a
6      foo       d

Теперь я хочу чтобы найти всех пользователей в одном Group s:

User   Comment  Group
---------------------
1      foo      a
2      bar      a
4      123      a
6      foo      d

Как я могу это сделать? Я думал так:

select t1.*
from   [table1] t1
left join [table1] t2 on t1.[User] = t2.[User]
and t1.[Comment] = 'foo'

Но это возвращает все записи в [table1]. Что я делаю не так?

Ответы [ 2 ]

4 голосов
/ 16 марта 2020

Вы можете использовать exists:

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

Для выполнения этого запроса вам нужен индекс на (comment, group).

3 голосов
/ 16 марта 2020

С оператором IN:

select * from tablename
where [Group] in (
  select [Group] from tablename
  where [Comment] = 'foo'
)

См. Демоверсию . Результаты:

> User | Comment | Group
> ---: | :------ | :----
>    1 | foo     | a    
>    2 | bar     | a    
>    4 | 123     | a    
>    6 | foo     | d    
>    7 | 654     | a    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...