如何正确使用CASE WHEN / THEN / ELSE IN?

时间:2015-12-19 05:20:03

标签: php mysql sql sql-update

这是我的疑问:

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

这是“WHEN id IN(...)”有效吗?我该怎么做这样的测试?

2 个答案:

答案 0 :(得分:2)

在update语句中使用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

答案 1 :(得分: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 |