MYSQL:如果存在

时间:2019-01-21 11:48:08

标签: mysql

如果componentDidMount() { this.mounted = true; } componentWillUnmount() { this.mounted = false; } async asyncFunction { if(this.isMounted){ setState(....); }else{ return; } } 表中存在jdwf_orders_main的值,我试图更新名为jaj_jno的表。

我正在尝试使用jdwf_alien_jobs来做到这一点,但是我似乎无法正确理解语法。 我的语法有什么问题。

IF EXISTS

1 个答案:

答案 0 :(得分:1)

MySQL不支持您尝试的操作。它提供了另一种获得相同结果的方法:在单个UPDATE查询中更新两个或多个联接表。

我无法测试,但是类似的东西应该起作用:

UPDATE jdwf_orders_main om
    LEFT JOIN from jdwf_alien_jobs aj ON om.jom_job_no = aj.jaj_jno
SET om.jom_adv_name = IF(af.jaj_no IS NULL, 'IAM Noob', 'IAM OP')
WHERE om.jom_job_no = '7200000'

工作原理

它在jdwf_orders_main条件下将表om(别名为jdwf_alien_jobs)与aj(别名为om.jom_job_no = aj.jaj_jno)连接起来。
LEFT JOIN确保左表(om)中的所有行都出现在结果集中;如果某行在右表中没有匹配的行,则将右行的字段使用充满NULL的行。
WHERE子句仅过滤与要由om.jom_job_no = '7200000'语句修改的条件UPDATE匹配的行。
SET子句使用om.jom_adv_name函数计算的值更新jom_adv_name(即jdwf_orders_main表中的列IF())。
如果IF()'IAM Noob',则af.jaj_jno函数将返回NULL。当来自om的行在af中不存在任何匹配的行时,就会发生这种情况(请参见上面LEFT JOIN子句的说明)。否则(当存在匹配行时),af.jaj_jno不是NULL,并且IF()函数将返回'IAM OP'