MYSQL:如果存在

MYSQL:如果存在,mysql,Mysql,如果jdwf\u alien\u jobs表中存在jaj\u jno的值,我正在尝试更新一个名为jdwf\u orders\u main的表 我正在尝试使用如果存在来实现它,但我似乎无法正确使用语法。 我的语法有什么问题 IF ( EXISTS (SELECT * from jdwf_alien_jobs where jaj_jno = '7200000') , UPDATE jdwf_orders_main set jom_adv_name = 'IAM OP' where jom_job_n

如果
jdwf\u alien\u jobs
表中存在
jaj\u jno
的值,我正在尝试更新一个名为
jdwf\u orders\u main
的表

我正在尝试使用
如果存在
来实现它,但我似乎无法正确使用语法。 我的语法有什么问题

IF ( EXISTS (SELECT * from jdwf_alien_jobs where jaj_jno = '7200000') ,
UPDATE jdwf_orders_main set jom_adv_name = 'IAM OP' where jom_job_no = '7200000',
UPDATE jdwf_orders_main set jom_adv_name = 'IAM Noob' where jom_job_no = '7200000');

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'
工作原理 它在
om.jom_job no=aj.jaj_jno
条件下,将表
jdwf_orders_main
(别名为
om
)与
jdwf_alien_jobs
(别名为
aj
)连接起来
LEFT JOIN
确保左表(
om
)中的所有行都出现在结果集中;如果右表中的某一行没有匹配的行,则右表的字段将使用一个满
NULL
s的行。
WHERE
子句仅过滤与要由
UPDATE
语句修改的条件
om.jom\u job\u no='7200000'
匹配的行。
SET
子句用
IF()
函数计算的值更新
om.jom\u adv\u name
(即
jdwf\u orders\u main
表中的
jom\u adv\u name列)。

IF()
函数返回
'IAM Noob'
IF
af.jaj_jno
NULL
。当
om
中的行在
af
中不存在任何匹配行时,就会发生这种情况(请参见上文
左连接
子句的说明)。否则(当存在匹配行时),
af.jaj_jno
不是
NULL
,并且
IF()
函数返回
'IAM OP'

为什么要用两次更新同一条记录?它先覆盖one@BhargavChudasamaOP尝试在
IF()
函数的两个分支上运行两个不同的
UPDATE
查询。非常感谢。这种变通方法也有效。谢谢