как выбрать соответствующую строку и сопоставить ее идентификатор и дату в той же таблице - PullRequest
0 голосов
/ 10 июля 2020

У меня есть следующие образцы данных

id   dt  a
1    1   token 
1    1   stuff 
1    2   at
2    1   token
2    1   stuff 
2    1   store
3    1   token
3    2   stuff
4    1   stuff
4    1   at

Я хочу вернуть каждую строку с «токеном», а также любые совпадения по наблюдениям id и dt. ожидаемый результат будет следующим:

 id   dt  a
1    1   token 
1    1   stuff 
2    1   token
2    1   stuff 
2    1   store
3    1   token

Я пробовал это:

SELECT a.*
FROM stuff AS a JOIN
stuff AS b ON (a.id=b.id AND a.dt=b.dt)
WHERE a.a="token";

но он просто меняет значения в «токен», как лучше всего это сделать?

Ответы [ 2 ]

0 голосов
/ 10 июля 2020

Вы можете присоединиться к столу против себя, чтобы получить желаемый результат. Например:

select a.*
from stuff a
join stuff b on b.id = a.id and b.dt = a.dt 
where b.a = 'token'

Теперь я понимаю, что ваше решение было почти правильным. Вы отфильтровали не ту таблицу. Вот и все.

0 голосов
/ 10 июля 2020

Хммм. . . Я думаю, что exists делает то, что вы хотите:

select s.*
from stuff s
where s.a = 'token' or
      exists (select 1 from stuff s2 where s2.id = s.id and s2.dt = s.dt and s2.a = 'token');
...