case when then在mysql和oracle中的不同

SELECT *
FROM record_dinner
WHERE case when dinner_type_id='10' THEN work_card_id='1' end
同样的sql语句 在mysql中可以查询出数据 但在oracle中却报错缺失关键字 是因为oracle语法不允许case when then之后跟这种语句吗

CASE语句的语法跟MySQL不一样,,Oracle中的CASE语句不支持在THEN子句中使用条件表达式把将条件放在CASE语句之前。正确语法是:


CASE
    WHEN condition THEN result
    [WHEN condition THEN result ...]
    [ELSE result]
END

你应该修改程这样:

SELECT *
FROM record_dinner
WHERE CASE WHEN dinner_type_id='10' AND work_card_id='1' THEN 1 ELSE 0 END = 1

【以下回答由 GPT 生成】

回答: 在MySQL和Oracle中,case when then语句的使用是有一些差异的。首先,case表达式的语法在两个数据库中是相同的:

CASE
    WHEN condition_1 THEN result_1
    WHEN condition_2 THEN result_2
    ...
    ELSE default_result
END

但是,MySQL和Oracle在case when then语句中的使用是稍有不同的。

在MySQL中,可以在case when then语句中使用条件表达式,例如dinner_type_id='10'。在这个特定的例子中,如果dinner_type_id的值等于10,将返回true,否则返回false。因此,MySQL查询可以写成:

SELECT * FROM record_dinner WHERE (CASE WHEN dinner_type_id='10' THEN work_card_id ELSE 0 END) = '1';

这里使用了括号将CASE WHEN语句括起来,并且给没有匹配的情况添加了一个默认值(0),并将整个case when结果与条件值进行比较。

然而,在Oracle中,case when语句的使用更为简单,不允许在THEN后面使用这种条件表达式的写法。在Oracle中,应该将条件表达式直接写在case when语句的条件中,而不是在THEN后面。因此,你可以将查询改写为:

SELECT * FROM record_dinner WHERE (CASE WHEN dinner_type_id='10' AND work_card_id='1' THEN 1 ELSE 0 END) = 1;

这里将条件work_card_id='1'直接放在case when语句的条件中,并且给匹配的情况返回1,不匹配的情况返回0,最后将整个case when结果与条件值进行比较。

总结一下,你可以根据数据库的类型选择合适的case when语句写法: - 在MySQL中,使用条件表达式在THEN后面,然后将case when结果与条件值进行比较。 - 在Oracle中,将条件表达式直接写在case when语句的条件中,并且给匹配的情况返回一个特定的值,最后将整个case when结果与条件值进行比较。

如果你在MySQL中的查询在Oracle中仍然报错,那可能是因为你的SQL语句还涉及到其他Oracle不支持的语法或写法。如果你能提供更详细的错误信息和SQL语句的完整内容,我可以帮助你进一步排查问题。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

Oracle不支持在WHERE子句中使用CASE WHEN THEN,会报错