同一个表的内连接,某些值不重复

问题描述 投票:0回答:1

我有一个简单的表(my_table):

id
1 真实
10 真实
11 真实
2
22

当我执行时:

SELECT my_table_1.id
       my_table_1.key
       my_table_2.id
       my_table_2.key
FROM my_table AS my_table_1
  INNER JOIN my_table AS my_table_2 ON my_table_1.id < my_table_2.id
WHERE my_table_1.key = my_table_2.key

我收到了想要的结果(没有重复的内部连接):

my_table_1.id my_table_1.key my_table_1.id my_table_2.key
1 真实 11 真实
1 真实 10 真实
2 22

但现在我只想使用以下命令检查 ids 11 和 10 的值:

SELECT my_table_1.id
       my_table_1.key
       my_table_2.id
       my_table_2.key
FROM my_table AS my_table_1
  INNER JOIN my_table AS my_table_2 ON my_table_1.id < my_table_2.id
WHERE my_table_1.key = my_table_2.key
  AND my_table_1.id IN (10, 11)

而不是完整的结果:

my_table_1.id my_table_1.key my_table_1.id my_table_2.key
1 真实 11 真实
10 真实 1 真实

我得到了错误的部分结果,例如:

my_table_1.id my_table_1.key my_table_1.id my_table_2.key
1 真实 11 真实

过了一段时间,我想出了如何用双

IN
解决这个问题:

SELECT my_table_1.id
       my_table_1.key
       my_table_2.id
       my_table_2.key
FROM my_table AS my_table_1
  INNER JOIN my_table AS my_table_2 ON my_table_1.id < my_table_2.id
WHERE my_table_1.key = my_table_2.key
  AND (my_table_1.id IN (10, 11) OR my_table_2.id IN (10, 11))

这为我放入

IN
子句中的任何 id 提供了正确的结果。

但是我还有一个问题,我可以以任何方式改进这个查询吗?我真的不喜欢使用两次

IN

sql postgresql join inner-join
1个回答
0
投票

我建议直接向

ON
条件添加过滤器,因为您不想在
IN
中重复
WHERE
子句:

SELECT my_table_1.id, 
       my_table_1.key, 
       my_table_2.id, 
       my_table_2.key
FROM my_table AS my_table_1
INNER JOIN my_table AS my_table_2 
    ON my_table_1.id < my_table_2.id
    AND my_table_1.key = my_table_2.key
    AND (my_table_1.id IN (10, 11) OR my_table_2.id IN (10, 11));

希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.