如果其他表中不存在记录,则更新MySQL

时间:2012-05-26 05:55:39

标签: mysql sql conditional-statements

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

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

提前致谢

3 个答案:

答案 0 :(得分:10)

update table_to_update 
set some_column = 123
where id = 1
and id not in (select id from table_b)

答案 1 :(得分:3)

  

以下SQL语句在我添加的位置充当外键   子表中的新字段具有此值的条件   存在于主表的列中。

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

参数和表格的含义:

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

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

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

第二种选择也是:

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

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

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

答案 2 :(得分:0)

您也可以尝试使用MySQL exists表达式。在较旧的MySQL版本上使用存在语法,即证明5.0比使用嵌套查询更快。

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