【问题标题】:MySQL update if record does not exists in other table如果记录在其他表中不存在,则 MySQL 更新
【发布时间】:2012-06-01 14:25:06
【问题描述】:

我正在尝试确定是否可以检查表 B 中是否存在特定记录。如果存在,请不要更新表 A。

我试过谷歌搜索,但我只找到插入版本,我不确定它是否可以通过更新查询。

提前致谢

【问题讨论】:

  • 你发现了吗?对我有用!

标签: mysql sql conditional-statements


【解决方案1】:

以下 SQL 语句用作我添加的外键 子表中的一个新字段,条件是该值 存在于主表的列中。

UPDATE t1
SET c1 = ?
WHERE t1.id = ?
AND ? NOT IN (SELECT id FROM t2);

参数和表格的含义:

  • t1:子表
  • t2:主表
  • 第一个? : 如果满足条件,将在 t1.c1 的字段中建立的值
  • 第二个? : 待更新字段所在记录的标识符
  • 第三? :评估条件所需的值,我将其与 t2 的字段进行比较

第一个和第三个参数的值必须相同!

在使用该语句时,当我们引用主表的字段时,该列必须有主键。这就是与外键相似的原因。


第二种选择也是:

UPDATE t1 a
LEFT JOIN t2 b
ON b.column = ?
SET t1.c1 = ?
WHERE b.column IS NULL && a.id = ?;

第一个和第二个参数必须相同。其中column 是主表的一列。

另一方面,当使用这句话时,我们有更大的灵活性,因为主表的列有主键不是必要条件。

【讨论】:

【解决方案2】:

您也可以尝试使用 MySQL exists 表达式。在旧的 MySQL 版本(即 5.0)上使用 exists 语法对我来说比使用嵌套查询要快。

update table_a
set some_column = 'bla'
where not exists (select id
                        from table_b
                        where table_a.id = table_b.id)

【讨论】:

  • 这个解决方案效率非常低,并且比 juergen d 他的解决方案需要更多的处理能力。
【解决方案3】:
update table_to_update 
set some_column = 123
where id = 1
and id not in (select id from table_b)

【讨论】:

  • 恐怕这不是我们想要的。此查询将更新表 A 中不存在于表 B 中的所有记录。但 John 想要更新特定记录,因此必须在 where 子句中添加 id = some_value AND 或其他条件。
  • @Riateche 你是对的,尽管我的问题有点含糊。
  • 不知道有没有触发器或者存储过程的解决方案?更新前 /* 代码在这里 */
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-07
  • 1970-01-01
  • 2016-01-13
  • 2018-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多