mysql - 为什么我的 case 语句返回 NULL 值,而我认为它不应该返回?

标签 mysql case-statement

问题位于底部,但简而言之,即使链接与我的 case 表达式匹配,我正在创建的表也会为字段 Division 提供 Null 值,而且我似乎找不到原因。

我正在创建一个表,根据程序内的链接 url 分配部门:

create table set_divisions as
  select distinct campaign, offer,
   case
   when upper(link) like '%NORTH%' then 'NORTH'
   when upper(link) like '%SOUTH%' then 'SOUTH'
   when upper(link) like '%EAST%'  then 'EAST'
   when upper(link) like '%WEST%'  then 'WEST'
   ELSE NULL
   END AS DIVISION
   FROM TABLE A;

然后我在 Division 中得到了很多 NULL,所以我试图看看我丢失了哪些链接,因为它们都应该在 Division 中具有值。每个事件确实有多个链接,其中一些链接与北、南、东或西无关,但每个事件还应包含案例陈述中的这些链接之一。

然后我运行以下命令:

select distinct link
from  A, set_divisions S
where A.campaigncode = S.campaigncode
and   A.offercode    = S.offercode
and (
     upper(link) like '%NORTH%'
     or upper(link) like '%SOUTH%'
     or upper(link) like '%EAST%'
     or upper(link) like '%WEST%');

返回的结果包含包含 NORTHSOUTHEASTWEST 的链接。

所以我的问题是在创建表时我在 case 表达式中做错了什么,导致它错过这些链接?

丢失链接的示例是(我只使用了南和东,但所有四个都有类似的链接):

http://product.south.com/information/preference
http://sports.east.com/unsubscribe/?email=%%Linkurl9%%

谢谢,这是我的第一篇文章,所以如果我错过了某些内容或者我的代码看起来很糟糕,我会提前道歉,哈哈。

雷格洛

最佳答案

在第二个查询中,您的 WHERE 子句指定链接必须包含 NORTH、SOUTH、EAST 或 WEST。您的第一个查询不包含类似的 WHERE 子句。

您可以运行此命令来查找不包含 NORTH、SOUTH、EAST 或 WEST 的链接以进行故障排除:

select distinct link
from  A, set_divisions S
where A.campaigncode = S.campaigncode
and   A.offercode    = S.offercode
and upper(link) not like '%NORTH%'
and upper(link) not like '%SOUTH%'
and upper(link) not like '%EAST%'
and upper(link) not like '%WEST%');

关于mysql - 为什么我的 case 语句返回 NULL 值,而我认为它不应该返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37169024/

相关文章:

vb.net - VB.NET将Select Case语句堆叠在一起,例如在Switch C#/Java中

mysql - 防止 Rails 父关系中的竞争条件

php - 选择具有多个值的记录并枚举它们

sql - case within 加入 "ON"子句

sql - T-SQL 条件 WHERE 子句

delphi - 为什么 CharInSet 比 Case 语句更快?

sql-server - 案例陈述有其他选择吗?

php - Where + 和 Where from 模型

mysql - 如何使用 LIKE 进行搜索,包括空格和空格?

mysql group 组的行