create table items(item_pk integer, pgid integer, prod_id integer, PRIMARY KEY(item_pk));
create table products(prod_id integer, version integer, pgid integer, flag char(1), PRIMARY KEY(prod_id));
insert into items(item_pk, pgid) values (1, 21);
insert into items(item_pk, pgid) values(2, 31);
insert into products(prod_id, version, pgid, flag) values (11, 101, 21, 'Y');
insert into products(prod_id, version, pgid, flag) values (22, 101, 21, 'N');
insert into products(prod_id, version, pgid, flag) values(33, 101, 31, 'N');
declare
prod_version NUMBER := :1 ;
begin
update items i set i.prod_id = (
select p.prod_id from products p where
p.version = prod_version and p.pgid = i.pgid and rownum =1
order by p.flag desc
) where i.xyz is null
commit; end;
產品表有兩個條目 - pseudo(flag ='Y')和actual(flag ='N')。加入內部查詢中的子句排序
如果沒有僞產品,需要取實際的產品。
上述查詢導致編譯錯誤。 內部查詢可能會返回多個記錄,但我只需要第一個記錄(即'Y'記錄。如果找不到'Y'rec,則需要'N'rec)。
@YasinOkumus:內部查詢可能會返回兩條記錄。如果存在,我需要'Y'記錄,否則需要'N'記錄。 – HanuAthena
我有點遲到了,所以我刪除了我的評論對不起。我正在寫一個答案,我希望我這次得到了正確的答案,並且你可以得到解決方案。 :) –
是「和rownum = 1」試圖獲得只有一個記錄? –