在mySQL中使用IN / NOT IN

由于某种原因,这两个SQL语句不相同.任何人都可以帮助理解为什么?

SELECT N, IF(P IS NULL, 'Root', IF(N NOT IN (SELECT P FROM BST), 'Leaf', 'Inner'))
FROM BST
ORDER BY N;

SELECT N, IF(P IS NULL, 'Root', IF(N IN (SELECT P FROM BST), 'Inner', 'Leaf'))
FROM BST
ORDER BY N;

附: – 这是HackerRank上的二进制搜索树问题.
https://www.hackerrank.com/challenges/binary-search-tree-1

最佳答案 以上jarlh的评论是正确的,即除了测试IFNULL或’为空’之外,没有任何东西将TRUE与NULL进行比较.所以如果查询:

(SELECT P FROM BST)

返回单个NULL值,这两个SQL语句将返回不同的结果.这可以通过以下两个SQL语句轻松演示:

select if (1 in (select null), 'a', 'b') => 'b'

select if (1 not in (select null), 'b', 'a') => 'a'
点赞