6

我试图弄清楚是否可以检查表 B 中是否存在特定记录。如果存在,请不要更新表 A。

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

提前致谢

4

3 回答 3

12
update table_to_update 
set some_column = 123
where id = 1
and id not in (select id from table_b)
于 2012-05-26T05:58:10.267 回答
4

以下 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主表的列在哪里。

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

于 2018-03-09T23:50:22.043 回答
2

您也可以尝试使用 MySQL存在表达式。在较旧的 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)
于 2014-05-05T13:00:26.087 回答