CASE SQL 语句不正确
Posted
技术标签:
【中文标题】CASE SQL 语句不正确【英文标题】:Incorrect CASE SQL statement 【发布时间】:2021-04-30 09:29:52 【问题描述】:我编写了一条返回无效字符的 SQL 语句。我知道这与我在哪里的案例陈述有关,所以任何人都可以告诉我错误。谢谢。
WHERE
<if test="gNumber != null">
dph.GNUMBER = #gNumber
</if>
<if test="licence != null">
dph.dlicenceNumber = #licence
</if>
AND dph.REASON = (CASE WHEN dph.REASON IS NOT NULL THEN par.CODE END)
【问题讨论】:
SQL 语法中是否允许这种标记?我不这么认为...... 我正在尝试在 where 中执行 if,确保 REASON 不为空 @Michak Turczyn 但是 SQL 不支持这种语法。它会产生错误 请提供示例数据、期望的结果以及您要实现的逻辑的清晰说明。 请引用您的文档来源,告诉您尖括号和正斜杠是有效的语法。 【参考方案1】:显而易见的假设是标记代码不正确。但是你可能有一个预处理器来删除它。
如果标记的代码是正确的,那么在某些情况下,逻辑是:
WHERE AND . . .
这是不正确的。一个典型的方法是:
WHERE 1 = 1 AND
<if test="gNumber != null">
dph.GNUMBER = #gNumber AND
</if>
<if test="licence != null">
dph.dlicenceNumber = #licence AND
</if>
dph.REASON = (CASE WHEN dph.REASON IS NOT NULL THEN par.CODE END)
CASE
表达式本身不会导致错误。但是话又说回来,这也没有必要,因为 NULL
值无论如何都无法进行比较。所以这是等价的:
WHERE 1 = 1 AND
<if test="gNumber != null">
dph.GNUMBER = #gNumber AND
</if>
<if test="licence != null">
dph.dlicenceNumber = #licence AND
</if>
dph.REASON = par.CODE
【讨论】:
以上是关于CASE SQL 语句不正确的主要内容,如果未能解决你的问题,请参考以下文章
where 子句中的 case 语句 - SQL Server