0

私は選択クエリを書いています.where条件で、フィールド値がnullの場合にチェックしたい場合は、他のフィールド値のみをチェックします。select はカーソルで使用されることに注意してください。

元のクエリ:


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 に答える