【问题标题】:SQL -- SELECT is returning values where a column = True, but not when = FalseSQL -- SELECT 返回列 = True 的值,但不返回 = 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 时,它​​什么也不显示。

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

【问题讨论】:

    标签: mysql sql mysql-python


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      where not (isOfficial <=> true)
      

      【讨论】:

      • Null 值总是与 false 比较,因此如果 Isofficial 为 NULL,那么原始测试都不会带回该记录。
      猜你喜欢
      • 2016-02-22
      • 1970-01-01
      • 2012-06-29
      • 2013-02-26
      • 2010-12-17
      • 2014-10-21
      • 2018-06-30
      • 1970-01-01
      • 2015-03-03
      相关资源
      最近更新 更多