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 的值的主要内容,如果未能解决你的问题,请参考以下文章