【问题标题】:MySQL Case When with 2 ConditionMySQL案例当有2个条件
【发布时间】:2015-09-09 16:17:54
【问题描述】:

我有一个像这里这样的简单案例,有人可以帮忙吗? 我在这里有两个表 COMPLAINT 和 HANDLING 现在我想从具有 2 个条件的表中进行选择,其中 HANDLING 表为空,并且来自 COMPLAINT 的日期距离 sysdate 超过 5 天。 如果我使用这样的 SQL 代码,就会出错:

您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 在'B.CID 为空并且(从 DUAL 中选择 SYSDATE)时的案例附近 - A.SUBMIT_DATE > 5 TH' 在第 2 行

SELECT * FROM complaint a LEFT JOIN handling b ON a.cid=b.cid
CASE 
WHEN B.CID IS NULL AND (SELECT SYSDATE FROM DUAL)- A.`SUBMIT_DATE` > 5 
THEN 'OVER'
ELSE 'CLEAR'
END

【问题讨论】:

  • 你在case之前漏掉了一个运算符。

标签: php mysql


【解决方案1】:

你添加的case语句放错了地方,不能像你现在这样在join子句中使用。

但是,如果您想使用 case when 选择某些内容,那么它必须在 select 子句中 some as

select
*, 
case 
 when b.cid is null and datediff(curdate(),a.SUBMIT_DATE) > 5 then 'OVER'
 else 'CLEAR'
end as `some_col_name`
from complaint a LEFT JOIN handling b ON a.cid=b.cid

【讨论】:

  • datediff(curdate(),a.SUBMIT_DATE) > 5 ,这是为了计算 SUBMIT_DATE 在 sysdate 之后超过 5 天吗?为什么不喜欢 datediff(curdate() - a.SUBMIT_DATE) > 5
  • 哦,不,你是对的 :) 此代码 (curdate(),a.SUBMIT_DATE) 用于计算两个不同的日期,谢谢
【解决方案2】:

case 语句必须在 select 中,而不是在 join 之后,如下所示:

SELECT *,
CASE 
WHEN B.CID IS NULL AND datediff(curdate(), a.SUBMIT_DATE) > 5 
THEN 'OVER'
ELSE 'CLEAR'
END AS 'YOUR_COL'
FROM complaint a LEFT JOIN handling b ON a.cid=b.cid

【讨论】:

  • 如果我使用它,则会出现如下错误:#1582 - 调用本机函数 'datediff' 时的参数计数不正确
  • A.SUBMIT_DATE 改成a.submit_date 请改
  • 请参考更新后的答案。 datediff() 参数已更改 @DelindaDyta
猜你喜欢
  • 2021-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-20
  • 1970-01-01
  • 2013-06-23
  • 1970-01-01
  • 2015-10-28
相关资源
最近更新 更多