mysql - 在 mySQL 中使用 IN/NOT IN

标签 mysql sql

由于某些原因,这两个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/

相关文章:

mysql - 条件作为在 mysql 中使用 AS "name"命名的列

php - 使用 HTML(Php) 表单将数据添加到 Mysql 数据库时 PHP 出现未定义索引错误

PHP 初学者 : Best practice for inserting into multiple tables with foreign key

java - Android HttpResponse 不能在 IF 语句中使用来检查内容

java - HQL、PostgreSQL : Not in clause not working, 语法错误)

php - 离线上网状态下Mysql的使用

mysql - 如何读取/解释 json 文件来定义 mysql 模式

php - 对于包含类别名称的每个类别行,仅从产品表中获取一行

sql - Clickhouse:减少元组数组以计算平均 session 时间

sql - 在 SQLite3 中,如何在 LIKE 子句中进行 SQL 转义?