SQL -- SELECT 返回列 = True 的值,但不返回 = False 的值

Posted

技术标签:

【中文标题】SQL -- SELECT 返回列 = True 的值,但不返回 = False 的值【英文标题】:SQL -- SELECT is returning values where a column = True, but not when = False 【发布时间】:2021-07-25 08:19:18 【问题描述】:

%%read_sql

SELECT Language, IsOfficial
  FROM countrylanguage c
  JOIN country a 
    ON a.Code = c.CountryCode
 WHERE Name = "United States"
   AND IsOfficial = False;

基本上,我有这段代码列出了一个国家/地区的语言(基于现有表)。

当我设置 IsOfficial = True(该语言是该国的官方语言)时,它会正确显示 IsOfficial = True 的语言。

即使我删除以 AND 开头的行,IsOfficial 也会显示所有带有 True 或 False 的语言。

但是,当我设置 AND IsOfficial = False 时,它​​什么也不显示。

为什么不显示非官方语言?

【问题讨论】:

【参考方案1】:

mysql 没有实际的布尔数据类型。

在 MySQL 中,零被认为是假,非零值被认为是真。要使用布尔文字,请使用分别计算为 1 和 0 的常量 TRUE 和 FALSE。

检查 IsOfficial 的数据库类型。如果你不满足条件 IsOfficial=false,那么 IsOfficial 实际上不是零,而是别的东西。

【讨论】:

【参考方案2】:

我猜isOfficial 实际上可能是NULL 而不是false。你可以试试:

where not (isOfficial <=> true)

【讨论】:

Null 值总是与 false 比较,因此如果 Isofficial 为 NULL,那么原始测试都不会带回该记录。

以上是关于SQL -- SELECT 返回列 = True 的值,但不返回 = False 的值的主要内容,如果未能解决你的问题,请参考以下文章

在sql select中为一列返回多个值

BigQuery SQL Select 返回键值对而不是两个单独的列

如果列具有特定值,则返回 true

SQL 临时将计数列添加到返回的结果集中

SQL查询

SQL SELECT 不能引用“INDEX”列