如果 jdwf_alien_jobs
表中存在 jaj_jno
的值,我将尝试更新名为 jdwf_orders_main
的表。
我正在尝试使用 IF EXISTS
来完成此操作,但我似乎无法获得正确的语法。
我的语法有什么问题。
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'
它是如何工作的
它连接表jdwf_orders_main
(别名为 om
)与 jdwf_alien_jobs
(别名为 aj
)在 om.jom_job_no = aj.jaj_jno
上条件。
LEFT JOIN
确保左表 ( om
) 中的所有行都出现在结果集中;如果某行在右表中没有匹配行,则一行充满 NULL
s 用于右表的字段。
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'
.
关于MYSQL : IF EXISTS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54289331/