由于某些原因,这两个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'
关于mysql - 在 mySQL 中使用 IN/NOT IN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37276055/