【发布时间】:2012-06-01 14:25:06
【问题描述】:
我正在尝试确定是否可以检查表 B 中是否存在特定记录。如果存在,请不要更新表 A。
我试过谷歌搜索,但我只找到插入版本,我不确定它是否可以通过更新查询。
提前致谢
【问题讨论】:
-
你发现了吗?对我有用!
标签: mysql sql conditional-statements
我正在尝试确定是否可以检查表 B 中是否存在特定记录。如果存在,请不要更新表 A。
我试过谷歌搜索,但我只找到插入版本,我不确定它是否可以通过更新查询。
提前致谢
【问题讨论】:
标签: mysql sql conditional-statements
以下 SQL 语句用作我添加的外键 子表中的一个新字段,条件是该值 不存在于主表的列中。
UPDATE t1
SET c1 = ?
WHERE t1.id = ?
AND ? NOT IN (SELECT id FROM t2);
参数和表格的含义:
第一个和第三个参数的值必须相同!
在使用该语句时,当我们引用主表的字段时,该列必须有主键。这就是与外键相似的原因。
第二种选择也是:
UPDATE t1 a
LEFT JOIN t2 b
ON b.column = ?
SET t1.c1 = ?
WHERE b.column IS NULL && a.id = ?;
第一个和第二个参数必须相同。其中column 是主表的一列。
另一方面,当使用这句话时,我们有更大的灵活性,因为主表的列有主键不是必要条件。
【讨论】:
您也可以尝试使用 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)
【讨论】:
update table_to_update
set some_column = 123
where id = 1
and id not in (select id from table_b)
【讨论】:
where 子句中添加 id = some_value AND 或其他条件。