SQL - 派生的布尔列

时间:2017-03-21 21:06:40

标签: sql postgresql

场景:餐馆的PostgreSQL数据库。

如果我有一个名为stock的列(在一个名为ingredients的表中),我有另一个名为inStock的列(在一个名为dish的表中的boolean列),如果所有与该菜相关的成分都只有一个菜有货为了检查这一点,我可以执行查询。

是否可以执行以下操作: 如果从查询返回的所有行的结果是!= 0,则将菜单的inStock设置为true,否则将其设置为false。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

您可以先选择没有库存的原料

select distinct d.id
from dish as d
inner join dishes_ingredients as di on di.dish_id == d.id 
where di.ingredient_qty == 0

这会给你没有所有股票的菜肴。

...然后我想用作子查询进行更新

update dish
set instock = 0 // or false
where id in (
  select distinct d.id
  from dish as d
  inner join dishes_ingredients as di on di.dish_id == d.id 
  where di.ingredient_qty == 0
)

没有使用postgres,因此语法可能不太正确