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,会报错