MYSQL : IF EXISTS

标签 mysql

如果 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_jnoNULL 。当对于 om 的行时,会发生这种情况af 中不存在任何匹配行(参见上面 LEFT JOIN 子句的解释)。否则(当存在匹配行时),af.jaj_jno不是NULLIF()函数返回'IAM OP' .

关于MYSQL : IF EXISTS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54289331/

相关文章:

mysql - 在 SQL 中插入新列

mysql - View /子查询中未使用的列 (MySQL)

java - JDBC MYSQL 语法错误异常

java - 为什么我会收到此 sql 错误?

mysql - 改变我的 MySQL 查询来实现排序

mysql - 收藏数据库中的东西 - 最有效的跟踪方法?

php - 如何只显示指定列中不包含 NULL 值的结果?

mysql - 根据父表中的条件删除记录

mysql - 从 varchar 字段获取最大值

mysql - 限价/订单动态字段的慢速 SQL 查询(从 X 点开始的坐标)