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'
IFaf.jaj_jno
为NULL
。当om
中的行在af
中不存在任何匹配行时,就会发生这种情况(请参见上文左连接
子句的说明)。否则(当存在匹配行时),af.jaj_jno
不是NULL
,并且IF()
函数返回'IAM OP'
为什么要用两次更新同一条记录?它先覆盖one@BhargavChudasamaOP尝试在IF()
函数的两个分支上运行两个不同的UPDATE
查询。非常感谢。这种变通方法也有效。谢谢