1

特定のIDが照会されているテーブルからいくつかの値を取得しようとしているクエリがあります。その値が存在しない場合でも、探していたID値のみを持つレコードをクエリで返すようにします。これが私がこれまでに試したことです。

Select attr.attrval, attr.uidservicepoint, sp.servicepointid 
From bilik.lssrvcptmarketattr attr 
Join bilik.lsmarketattrtype type on attr.uidmarketattrtype = type.uidmarketattrtype AND 
type.attrtype IN ('CAPACITY_REQUIREMENT_KW') and TO_CHAR( attr.starttime , 'mm/dd/yyyy')in ('05/01/2011') 
Right Outer Join bilik.lsservicepoint sp on attr.uidservicepoint = sp.uidservicepoint
Where sp.servicepointid in ('RGE_R01000051574382') Order By sp.servicepointid ASC

この例では、RGE_R01000051574382を探しています。それがテーブルSP.servicepointidに存在しない場合でも、プルしている他の値がnullのレコードで「RGE_R01000051574382」を返すようにします。通常、これを実行しているときは、一度に約1000個の特定の値を取得します。

誰かがこれについて与えることができる洞察を持っているなら、それは大いにありがたいです。本当にありがとう!

4

2 に答える 2

1

servicepointid列にデータが入力された状態でレコードを返したいと言っていると思いますが、他のすべてはnullですか?

その場合は、ユニオンを使用してください。

select   ...your query without order by...
and      sp.servicepointid = 'RGE_R010000515743282'
union
select   null, null, 'RGE_R010000515743282'
from     dual
where    not exists (select 'x' from (...your query without order by...))

完全な例を次に示します。

create table test (id number, val varchar2(10));
insert into test (id, val) values (1, 'hi');

select   id,
         val
from     test
where    id = 1
union
select   1,
         null
from     dual
where    not exists (select   'x'
                     from     test
                     where    id = 1)
于 2012-04-10T20:16:53.097 に答える
1

私の理解が正しければ、WHERE句を句に移動するだけですJOIN

select attr.attrval,
    attr.uidservicepoint,
    sp.servicepointid
from bilik.lssrvcptmarketattr attr
join bilik.lsmarketattrtype type on attr.uidmarketattrtype = type.uidmarketattrtype
    and type.attrtype in ('CAPACITY_REQUIREMENT_KW')
    and TO_CHAR(attr.starttime, 'mm/dd/yyyy') in ('05/01/2011')
right outer join bilik.lsservicepoint sp on attr.uidservicepoint = sp.uidservicepoint
    and sp.servicepointid in ('RGE_R01000051574382')
order by sp.servicepointid 
于 2012-04-10T19:57:09.197 に答える