我正在尝试更新列,但我需要检查表中是否存在新值不应该。基于某些原因,我无法在该列上创建唯一索引。那么如何通过查询处理呢?
UPDATE mytable SET col = :val WHERE id = :id;
那么在更新之前如何检查:val
列中是否存在col
?
答案 0 :(得分:1)
你不能像在其他SQL语言中那样做一个简单的NOT EXISTS子选择。但是,您可以对虚拟表进行交叉连接,以检查是否存在val,并防止在虚拟表具有结果时发生更新。
UPDATE mytable AS tb1
CROSS JOIN (SELECT 1 `valExsits` FROM mytable WHERE col = :val LIMIT 1) AS tbTest
SET tb1.col = :val
WHERE tb1.id = :id AND tbTest.valExsits IS NULL
答案 1 :(得分:1)
您可以使用不
UPDATE mytable SET col = :val WHERE id = :id
and not(1 = ( select ifnull(max(1),0) from mytable where col = :val)) ;