这是我的疑问:
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(...)”有效吗?我该怎么做这样的测试?
答案 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/1和http://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 |