所以我今天下午试图解决这个HackerRank挑战,遇到了一个让我质疑我对SQL中
NOT IN
运算符的理解的情况。
首先,我执行了这个查询:
SELECT bst.N FROM BST WHERE bst.N IN (SELECT DISTINCT(P) FROM BST)
并得到这个结果:
注意
N
列为 5 的行如何没有出现在结果中。
然后我决定否定
IN
运算符,令我惊讶的是,没有检索到任何结果! (这里应该出现N=5的那一行吧?)
查询
SELECT bst.N FROM BST WHERE bst.N NOT IN (SELECT DISTINCT(P) FROM BST)
导致返回 0 行 (
~ no response on stdout ~
)
我确定表中肯定有一行
N
值为 5,但它没有出现在 2 个查询中的任何一个中。我认为这些查询的结果是相互补充的,但显然我错了,希望得到一个很好的解释。
这是
的输出SELECT N, P FROM bst
1 2
3 2
5 6
7 6
2 4
6 4
4 15
8 9
10 9
12 13
14 13
9 11
13 11
11 15
15 NULL
有人可以告诉我如何修复我的查询,以便它检索表中
N
值没有出现在P
列中的行吗?
请注意,这两个查询都不是(或应该是)HackerRank 挑战的解决方案,我只是想了解我的代码的行为。