0

我正在编写一个选择查询,在 where 条件下我想检查一个字段值,如果它为空,那么只有我会检查其他其他字段值。请注意,选择是在光标中使用的。

原始查询:


SELECT ni.node_installation_id,ni.customer_node_id,ni.customer_id,c.brand_name_1,substr(nitr.name,1,instr(nitr.name, ' ')-1) as node_inst_type
    from node_installation ni , customer c , node_inst_type_release nitr
    where ni.customer_id = c.customer_id 
    and ni.node_inst_type_release_id = nitr.node_inst_type_release_id
    **and trunc(sysdate) - trunc(ni.arne_timestamp) >= 60** 
    and ni.no_of_collection_node_missed >= 4
    and c.customer_id =90;

以粗体表示的引用语句,如果 ni.arne_timestamp 为 null,则结果也为 null。在这种情况下,我想检查其他条件,如 ni.arne_flag = 'I' 并在选择查询中获取这些行。希望我这次很清楚。

4

1 回答 1

1

如果 ni.arne_timestamp 为 null,则结果也为 null。在这种情况下,我想检查其他情况,例如 ni.arne_flag = 'I'

在谓词中添加对NULL值的检查,如下所示:AND

...
AND(ni.arne_timestamp IS NULL OR ni.arne_flag = 'I')
AND(ni.arne_timestamp IS NULL 
    OR 
    (trunc(sysdate) - trunc(ni.arne_timestamp)) >= 60 )

因此,使用 ANSI-92JOIN语法的查询应如下所示:

SELECT 
  ni.node_installation_id,
  ni.customer_node_id,
  ni.customer_id,
  c.brand_name_1,
  substr(nitr.name, 1, instr(nitr.name, ' ') - 1) as node_inst_type
FROM node_installation ni 
INNER JOIN customer c ON ni.customer_id = c.customer_id 
INNER JOIN node_inst_type_release nitr 
        ON ni.node_inst_type_release_id = nitr.node_inst_type_release_id
WHERE (ni.arne_timestamp IS NULL OR ni.arne_flag = 'I')
  AND (ni.arne_timestamp IS NULL 
         OR 
       (trunc(sysdate) - trunc(ni.arne_timestamp)) >= 60 )
  AND ni.no_of_collection_node_missed >= 4
  AND c.customer_id = 90;
于 2012-10-11T08:15:11.310 回答