2017-10-17 171 views
0

我有2個表格(產品和購物車)。購物車是foreign key的商品。根據另一個表中的選擇在一個表中更新字段

當我爲每個產品生成具有相同外國代碼的所有代碼key(id_cart)我需要更新表格購物車中的代理行,但前提是所有具有相同id_cart的產品都已經具有此字段填充。

我想這樣做只有一個查詢。可能嗎?

在此先感謝!

+0

編輯你的問題,並提供樣本數據和預期的結果。這聽起來像你可能需要一個觸發器。 –

回答

0

有幾種方法可以做到這一點,比如像這樣updatehaving條款:

update cart c set status = 'COMPLETE' 
    where exists (select 1 
        from product p where p.id_cart = c.id 
        having count(1) = count(code)) 

merge聲明:

merge into cart c 
using (select id_cart 
     from product 
     group by id_cart 
     having count(1) = count(code)) p 
on (p.id_cart = c.id) 
when matched then update set status = 'COMPLETE' 

的測試數據:

create table product (id number(3), name varchar2(10), code varchar2(4), id_cart number(3)); 
insert into product values (1, 'pen', 'A', 1); 
insert into product values (2, 'pencil', 'X', 1); 
insert into product values (3, 'box', null, 2); 
insert into product values (4, 'paper', 'Q', 2); 

create table cart (id number(3), status varchar2(10)); 
insert into cart values (1, null); 
insert into cart values (2, null); 

結果:

ID STATUS 
--- ---------- 
    1 COMPLETE 
    2 
0

您可以使用更新的 例如

UPDATE dbo.Cart 
SET  [fieldToUpdate] = p.fieldToUpdate 
FROM dbo.Cart c 
     JOIN dbo.products p ON c.fk = p.fk 
WHERE cart.id = c.id 
相關問題