MySQL中的基本逻辑

时间:2011-11-23 17:43:28

标签: mysql logical-operators

我们当前的mysql脚本将我们的Invoicing软件连接到我们的网站更新库存水平,但是我们的产品表中有一个字段,用于指示产品是否可见,脚本无法解决。我想介绍一些IF逻辑,将prodvisible列设置为1,如果它正在更新的库存水平是> 0

在我的研究中,似乎IF不能出现功能,遗憾的是我没有经验,尽管我付出了最大的努力,但我无法让它发挥作用。

我们现有的成功更新库存水平的脚本如下......

update isc_products p
set
p.prodcurrentinv =[{Level_LessOrderBook}]
where p.prodcode = '[{ItemNumber}]' and p.prodinvtrack=1
--GO;--
update isc_product_variation_combinations pvc
set
pvc.vcstock = [{Level_LessOrderBook}]
where pvc.vcsku='[{ItemNumber}]'

我想将某些内容集成到第一部分,其中包含以下内容

If [{Level_LessOrderBook}] > 0
p.prodvisible = 1 where  p.prodcode = '[{ItemNumber}]'
ENDIF

如果它缺货,我不希望它将产品设置为不可见,只要它有库存就可见。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

你应该能够在没有IF声明的情况下这样做:

update isc_products p
set p.prodvisible = 1
where p.prodcode = '[{ItemNumber}]'
and [{Level_LessOrderBook}] > 0

或者,如果您在一个声明中询问这样做:

update isc_products p
set
p.prodcurrentinv = [{Level_LessOrderBook}],
p.prodvisible = IF([{Level_LessOrderBook}] > 0, 1, p.prodvisible)
where p.prodcode = '[{ItemNumber}]' and p.prodinvtrack=1

最后,这个怎么样?

update
    isc_products p
set
    p.prodcurrentinv = [{Level_LessOrderBook}],
    p.prodvisible = case when [{Level_LessOrderBook}] > 0 then 1 else p.prodvisible end
where
    p.prodcode = '[{ItemNumber}]'
    and p.prodinvtrack = 1
--GO;--
update
    isc_product_variation_combinations pvc
set
    pvc.vcstock = [{Level_LessOrderBook}]
where
    pvc.vcsku='[{ItemNumber}]'

我将所有内容的格式与现有脚本的其余内容完全相同。您确定列prodvisible是否存在,拼写是否正确,并采用数值或位值?