2015-12-19 32 views
1

這裏是我的查詢:如何在IN中正確使用CASE WHEN/THEN/ELSE?

UPDATE tbl_pedidos_produtos SET status = CASE 
    WHEN id IN (SELECT produto_id FROM tbl_pedidos_cotacaos_produtos) THEN 4 
    ELSE 3 END WHERE pedido_id = ".$produto->itens[$t]->pedido_id 

這是 「當身份證件(......)」 是否有效?我該如何做這樣的測試?

回答

1

是的,這是一個有效的方式做一個更新。

你可以做測試用SQLFiddle這樣的:http://sqlfiddle.com/#!9/67b3a/1http://sqlfiddle.com/#!9/5158af/1

create table test (id int, status varchar(10)); 
insert into test values (1, null); 

create table test2 (id int); 
insert into test2 values (2); 

update test 
set status = case when id in (select id from test2) then 4 else 3 end 
where id = 1; 

select * from test 

結果:

| id | status | 
|----|--------| 
| 1 |  3 | 
2

在您的更新語句中使用left join條款應做的伎倆:

UPDATE tbl_pedidos_produtos pp 
LEFT JOIN tbl_pedidos_cotacaos_produtos pcp ON pp.id = pcp.produto_id 
SET  pp.status = CASE WHEN pcp.produto_id IS NULL THEN 4 ELSE 3 END 
WHERE  pedido_id = ".$produto->itens[$t]->pedido_id