我正在尝试查找连接到 python的mysql数据库中特定列的用法。Python 将以下内容视为“虚假”:
- 空列表:[]
- 空元组:()
- 空字典:{}
- 空字符串“”
- 整数:0
- 浮点数:0.0
- 没有任何
- 错误的
我意识到这有点依赖于 ORM(例如,空数据类型存储为 NULL 而不是字符串)但下面有点等价,有没有更好的方法,有什么明显的我遗漏了吗?也许0.0?这个想法是计算 row_count 并减去这个结果。我尝试NOT IN
了真实,但似乎没有得到一致的结果。
SELECT COUNT(*) FROM `tabBatch` WHERE naming_series IN ('', 0, NULL);
NULL
,结果将是NULL
.NULL
只能使用这些进行测试:IS NULL
,IS NOT NULL
,<=>
. (好吧,我可能忘记了一些事情。)另见,COALESCE()
。NOT NULL
,不能存储NULL
; 尝试这样做可能会存储 0 / 0.0 / ''。WHERE x IS NULL OR x = 0
;为您的“例外”案例选择一个或另一个。NULL
;让我们讨论您的特定业务逻辑。这种一般性的讨论可能还不够。EXISTS(SELECT 1 FROM .. WHERE ...)
会更快。它总是返回 0 或 1。NULL
某些聚合忽略值(请参阅 参考资料GROUP BY
)。运行这些以查看一些示例:
这样想,
NULL
代表任何可能的价值;它不知道是哪一个。最后,我发现这满足了我的需要,因为我需要在查询中多次使用它,并且它必须处理各种字段类型(您不能从 CHAR 向下转换为 INT,似乎只能向上转换)。
COALESCE 适用于没有行的表,在这种情况下 SUM 返回 NULL。事实证明这很有用,因为在另一个应用程序中,我想区分零行(SUM = NULL)和全部为空的行(SUM = 0)。
将其用作列字段而不是 WHERE 子句的优点是它可以在同一查询中多次用于多个字段。WHERE 子句需要对每个字段进行查询。
奖励:我用 a
COUNT(*) as total
来查找同一查询中的总行数。