Mysql 如何处理SQL条件子句中的null?
我最近发现,如果其中的值为null,则查询无法处理我的一些记录。显然,在SQL中,null不能与任何东西进行比较,甚至不能与null进行比较Mysql 如何处理SQL条件子句中的null?,mysql,sql,null,Mysql,Sql,Null,我最近发现,如果其中的值为null,则查询无法处理我的一些记录。显然,在SQL中,null不能与任何东西进行比较,甚至不能与null进行比较 trendingViews = IF(viewed IS NULL = 1 OR viewed != '2012-05-21 00:00:00', 1, COALESCE(trendingViews, 0) + 1), 如何将此查询更改为有条件地检查提供的值和null?检查null的正确方法是MyField is null。正如您正确指出的那样,直接与
trendingViews = IF(viewed IS NULL = 1 OR viewed != '2012-05-21 00:00:00', 1, COALESCE(trendingViews, 0) + 1),
如何将此查询更改为有条件地检查提供的值和null?检查null的正确方法是MyField is null。正如您正确指出的那样,直接与null进行比较是不起作用的。如果要排除列不为null的结果,则需要在where子句中使用is not null:
select ...
where ...
and column is not null
trendingViews = IF(viewed IS NULL = 1 OR viewed != '2012-05-21 00:00:00', 1, COALESCE(trendingViews, 0) + 1),
使用合并:
UPDATE company
SET views = COALESCE(views, 0) + 1,
trendingViews = IF(viewed != '2012-05-21 00:00:00', 1, trendingViews + 1),
viewed = IF(viewed != '2012-05-21 00:00:00', '2012-05-21 00:00:00', viewed)
WHERE id = '3024'
trendingViews = IF(viewed IS NULL = 1 OR viewed != '2012-05-21 00:00:00', 1, COALESCE(trendingViews, 0) + 1),
使用合并值1。。。valueN或isnullvalue1、value2为空字段定义可选的非空值
trendingViews = IF(viewed IS NULL = 1 OR viewed != '2012-05-21 00:00:00', 1, COALESCE(trendingViews, 0) + 1),
Coalesce将从参数列表中返回第一个非空值。Isnull将返回第二个参数值,如果第一个参数为null除了给出的其他答案外,您还可以使用null安全比较运算符。注意:我不是mysql人员,但我是TSQL人员。
trendingViews = IF(viewed IS NULL = 1 OR viewed != '2012-05-21 00:00:00', 1, COALESCE(trendingViews, 0) + 1),
首先,对其中一个条件更新语句的一般逻辑进行评论:当您第一次选中“查看”以查看
特定值,如果“查看”不属于该值,则将其设置为该值,表示您的工作比需要的更努力
trendingViews = IF(viewed IS NULL = 1 OR viewed != '2012-05-21 00:00:00', 1, COALESCE(trendingViews, 0) + 1),
我的意思是,如果您知道希望所有ID为3024的记录在“已查看”列中具有相同的时间戳,
然后,不需要首先检查列中的值,只更新不匹配的值
额外的工作也是如此。如果您打算将Id为“3024”的所有“已查看”设置为“2012-05-21 00:00:00”,
然后,将它们设置为该值。不需要考虑他们原来的价值是什么…你不在乎。< /P>
trendingViews = IF(viewed IS NULL = 1 OR viewed != '2012-05-21 00:00:00', 1, COALESCE(trendingViews, 0) + 1),
因此,不是:
viewed = IF(viewed != '2012-05-21 00:00:00', '2012-05-21 00:00:00', viewed)
trendingViews = IF(viewed IS NULL = 1 OR viewed != '2012-05-21 00:00:00', 1, COALESCE(trendingViews, 0) + 1),
你只需要:
viewed = '2012-05-21 00:00:00'
trendingViews = IF(viewed IS NULL = 1 OR viewed != '2012-05-21 00:00:00', 1, COALESCE(trendingViews, 0) + 1),
其次,可以在if语句中使用'or'和/或'coalesce',这样就不会忽略空值。
通过使用或与IS NULL和/或与非NULL默认值合并,可以强制更新任何NULL值。
在您的特定示例中,使用默认值为0的coalesce,可以在
“trendingViews”列设置为1,因为您将递增1,并且您将使用0作为空实例的默认值
trendingViews = IF(viewed IS NULL = 1 OR viewed != '2012-05-21 00:00:00', 1, COALESCE(trendingViews, 0) + 1),
例如:
trendingViews = IF(viewed IS NULL = 1 OR viewed != '2012-05-21 00:00:00', 1, COALESCE(trendingViews, 0) + 1),
更新声明的第一行…设置“视图”的部分让我困惑,
因为我不知道您的目的是否是检查名为“views”的列/字段的存在,
或者,如果您试图检查“视图”列中的值是否为非空。
如果您的目的是检查它是否为null,然后在这种情况下将其增加1,并且
如果为空,则将其设置为1,则可以执行以下操作:
trendingViews = IF(viewed IS NULL = 1 OR viewed != '2012-05-21 00:00:00', 1, COALESCE(trendingViews, 0) + 1),
views = IF(views IS NULL != 1, views + 1, 1),
下面是我将在MYSQL中测试的全部语句:
trendingViews = IF(viewed IS NULL = 1 OR viewed != '2012-05-21 00:00:00', 1, COALESCE(trendingViews, 0) + 1),
UPDATE company SET
views = IF(views IS NULL = 0, views + 1, 1),
trendingViews = IF(viewed IS NULL = 1 OR viewed != '2012-05-21 00:00:00', 1, COALESCE(trendingViews, 0) + 1),
viewed = '2012-05-21 00:00:00'
WHERE id = '3024';
请记住,我不使用MYSQL。。。。我还没有测试这些MYSQL更改。
如果在TSQL中执行此操作,则以下语句将起作用:
trendingViews = IF(viewed IS NULL = 1 OR viewed != '2012-05-21 00:00:00', 1, COALESCE(trendingViews, 0) + 1),
UPDATE company SET
[views] = (CASE WHEN [views] IS NOT NULL THEN [views] + 1 ELSE 1 END),
trendingViews = CASE WHEN viewed IS NULL OR viewed != '2012-05-21 00:00:00' THEN 1 ELSE COALESCE(trendingViews, 0) + 1 END,
viewed = '2012-05-21 00:00:00'
WHERE id = '3024';
go