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

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

我有以下样本数据

  1. id dt a
  2. 1 1 token
  3. 1 1 stuff
  4. 1 2 at
  5. 2 1 token
  6. 2 1 stuff
  7. 2 1 store
  8. 3 1 token
  9. 3 2 stuff
  10. 4 1 stuff
  11. 4 1 at

我想返回每一行的“token”以及任何匹配的id和dt观察。预期输出如下

  1. id dt a
  2. 1 1 token
  3. 1 1 stuff
  4. 2 1 token
  5. 2 1 stuff
  6. 2 1 store
  7. 3 1 token

我试过这个:

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

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

bvn4nwqk

bvn4nwqk1#

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

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

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

nafvub8i

nafvub8i2#

嗯。我想 exists 你想要什么:

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

相关问题