oracle - 在 Oracle 12c 的 WHERE 子句中使用 CASE
问题描述
我有一个如下的选择语句:
SELECT * FROM
(SELECT d.value, d.line, d.language, l.pos_id, l.vehicle_id,l.vehicle_given
FROM Vehicle_value d,
vehicle_document l
WHERE d.gen_id = l.gen_id
AND d.pos_id = l.pos_id
AND d.gen_id = 1255) d1
LEFT OUTER JOIN
(SELECT d.value, d.line, d.language, l.pos_id, l.vehicle_id,l.vehicle_given
FROM TBB_GEN_Daten d,
TBB_GEN_Lesehilfe l
FROM Vehicle_value d,
vehicle_document l,
WHERE d.gen_id = l.gen_id
AND d.pos_id = l.pos_id
AND d.gen_id = 1254) d2
ON d1.value = d2.value
AND d1.pos_id = d2.pos_id
AND case when d1.vehicle_given = 'YES' then (d1.vehicle_id = d2.vehicle_id)
else end
AND d1.value is not null;
所以我想仅在 d1.vehicle_given 值为“YES”时将 d1.vehicle_id 与 d2.vehicle_id 进行比较。但是我在这里使用的案例陈述是错误的,因此它不起作用。还有其他可以做这个比较吗?
解决方案
OR
为匹配条件或不匹配条件使用括号和条件YES
:
AND ( d1.vehicle_given <> 'YES'
OR d1.vehicle_given IS NULL
OR d1.vehicle_id = d2.vehicle_id )
如果您使用CASE
如下表达式:
AND d1.vehicle_id = CASE
WHEN d1.vehicle_given = 'YES'
THEN d2.vehicle_id
ELSE d1.vehicle_id
END
然后,当ELSE
条件匹配时,您将有效地以AND d1.vehicle_id = d1.vehicle_id
. 天真地,这看起来应该没问题,但是如果d1.vehicle_id
是,NULL
那么您最终将进行比较NULL = NULL
,结果不是真实的,并且该行将被排除在外,这不是您想要的。
推荐阅读
- bash - 如何使用bash将文件中的行数写入单独文件中的一行
- sql - How can I filter rows if one array contains all values from another array using BigQuery?
- python - 每当一个数字被连续替换时,它就会改变一个整体变量
- c# - 串行通信 - 通过 Modbus 发送十六进制数据
- assembly - 从 MIPS 程序写入 .txt 文件时遇到问题
- javascript - 尝试使用数组方法来帮助显示消息
- memory-management - Javascript 中的内存管理
- flutter - 按下按钮后添加卡片小部件
- php - 如何使用 PHP 和 Mysql 一次只显示一条记录?
- reactjs - Redux 连接的组件不渲染