NOT IN 运算符如何在带有子查询的 mySQL 中工作?

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

所以我今天下午试图解决这个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 挑战的解决方案,我只是想了解我的代码的行为。

mysql sql operators
© www.soinside.com 2019 - 2024. All rights reserved.