`=` 附近的语法不正确 - SQL 表达式
Incorrect Syntax Near `=` - SQL Expression
我正在尝试在 WHERE
statement.But 中包含条件检查,但我一直在 = 3
处收到无效表达式
WHERE APCCL.data = @coolval
AND CCMF.Status_ID = 1
AND APCCL.Status_ID = 1
AND CLM.myval = 3
AND
CASE APEL.numval
WHEN 1 THEN CLM.value = 3 END
基本上我想在 APEL.numval=1
时检查 CLM.VALUE=3
你不能有那样的 CASE 表达式。
应该是
WHERE APCCL.data = @coolval
AND CCMF.Status_ID = 1
AND APCCL.Status_ID = 1
AND CLM.myval = 3
AND clm.value =
CASE APEL.numval
WHEN 1 THEN 3 END
如果你的意思是逻辑蕴涵APEL.numval=1 -> CLM.VALUE=3
那么
..
AND (APEL.numval <> 1 OR CLM.VALUE = 3)
CASE WHEN
表达式 returns null 如果不满足条件(除非用 ELSE
指定)所以在你的情况下不满足条件查询可能变为:
WHERE APCCL.data = @coolval
AND CCMF.Status_ID = 1
AND APCCL.Status_ID = 1
AND CLM.myval = 3
AND NULL --when condition not net
这会导致语法错误,因此您不能在 CASE WHEN
语句中使用整个比较。您可以 return 列或 hard-coded 数据。
我会考虑逻辑绕过或其他 library/framework 支持动态查询处理或使用 pl/sql 来处理 if/else 案例。
这并不理想,但如果您在 CLM.value = 3
中比较的 3 是常量,则您的查询可以更改为:
WHERE APCCL.data = @coolval
AND CCMF.Status_ID = 1
AND APCCL.Status_ID = 1
AND CLM.myval = 3
AND (CASE APEL.numval
WHEN 1 THEN CLM.value
ELSE 3
END) = 3
这将导致以下结果:
- 条件满足时:比较
CLM.VALUE = 3
- 不满足条件时:比较
3 = 3
(无意义的真语句)
我正在尝试在 WHERE
statement.But 中包含条件检查,但我一直在 = 3
WHERE APCCL.data = @coolval
AND CCMF.Status_ID = 1
AND APCCL.Status_ID = 1
AND CLM.myval = 3
AND
CASE APEL.numval
WHEN 1 THEN CLM.value = 3 END
基本上我想在 APEL.numval=1
时检查 CLM.VALUE=3你不能有那样的 CASE 表达式。
应该是
WHERE APCCL.data = @coolval
AND CCMF.Status_ID = 1
AND APCCL.Status_ID = 1
AND CLM.myval = 3
AND clm.value =
CASE APEL.numval
WHEN 1 THEN 3 END
如果你的意思是逻辑蕴涵APEL.numval=1 -> CLM.VALUE=3
那么
..
AND (APEL.numval <> 1 OR CLM.VALUE = 3)
CASE WHEN
表达式 returns null 如果不满足条件(除非用 ELSE
指定)所以在你的情况下不满足条件查询可能变为:
WHERE APCCL.data = @coolval
AND CCMF.Status_ID = 1
AND APCCL.Status_ID = 1
AND CLM.myval = 3
AND NULL --when condition not net
这会导致语法错误,因此您不能在 CASE WHEN
语句中使用整个比较。您可以 return 列或 hard-coded 数据。
我会考虑逻辑绕过或其他 library/framework 支持动态查询处理或使用 pl/sql 来处理 if/else 案例。
这并不理想,但如果您在 CLM.value = 3
中比较的 3 是常量,则您的查询可以更改为:
WHERE APCCL.data = @coolval
AND CCMF.Status_ID = 1
AND APCCL.Status_ID = 1
AND CLM.myval = 3
AND (CASE APEL.numval
WHEN 1 THEN CLM.value
ELSE 3
END) = 3
这将导致以下结果:
- 条件满足时:比较
CLM.VALUE = 3
- 不满足条件时:比较
3 = 3
(无意义的真语句)