我试图在连接到python的mysql数据库中找到特定列的用法。Python将以下内容计算为“falsy”:
我意识到这在某种程度上是与ORM有关的(例如,空数据类型存储为NULL而不是字符串),但下面的内容是否有点等价,是否有更好的方法,以及是否有明显的遗漏?可能是0.0?其思想是计算一个row_count并减去这个结果。我尝试了NOT IN的真实性,但似乎没有得到一致的结果。
SELECT COUNT(*) FROM `tabBatch` WHERE naming_series IN ('', 0, NULL);发布于 2022-03-11 20:40:22
最后,我发现这做了我所需要的,因为我需要在查询中多次使用它,并且它必须处理各种字段类型(您不能从CHAR转换成INT,似乎只有up )。
合并用于没有行的表,在这种情况下,SUM返回NULL。这是有用的,因为在另一个应用程序中,我想区分零行(SUM = NULL)和空行(SUM = 0)。
sql_truthy = """
COALESCE(SUM(
CASE WHEN `{field}` IS NULL THEN 0
WHEN CAST(`{field}` AS CHAR) IN ('0', '0.0', '') THEN 0
ELSE 1
END
), 0) AS used"""使用它作为列字段而不是WHERE子句的优点是,它可以在同一个查询中多次用于多个字段。WHERE子句需要对每个字段进行查询。
奖励:我使用一个COUNT(*) as total来查找同一个查询中的总行。
发布于 2022-03-11 20:37:21
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)。运行这些代码可以看到一些示例:
SELECT NULL IN (1, 2); --> NULL
SELECT 1 IN (1, NULL); --> 1
SELECT 1 IN (2, NULL); --> NULL
SELECT NULL IN (1, NULL); --> NULL可以这样想,NULL表示任何可能的值;它不知道哪个值。
https://dba.stackexchange.com/questions/308589
复制相似问题