sql—如何在同一个表中选择匹配行并匹配其id和日期

yjghlzjz  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(449)

我有以下样本数据

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

我想返回每一行的“token”以及任何匹配的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";

但它只是把一个标记中的值改成“token”,最好的方法是什么?

bvn4nwqk

bvn4nwqk1#

您可以将表与其自身连接以获得所需的结果。例如:

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

我现在意识到你的解决方案几乎是正确的。你过滤错表了。就这样。

nafvub8i

nafvub8i2#

嗯。我想 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');

相关问题