我想更新表格的一列:
UPDATE product prod
SET prod.prod_supplier_id = (SELECT s.prod_supplier_id
FROM supplier s
WHERE s.prodno = prod.prodno
) the SELECT s.prod_supplier_id FROM supplier s WHERE s.prodno = prod.prodno
不能返回一个空结果,如果它是空的,更新将不会被做,怎么做呢?
发布于 2013-12-17 11:23:31
您还需要在WHERE子句中筛选要更新的行:
UPDATE product prod
SET prod.prod_supplier_id = (SELECT s.prod_supplier_id
FROM supplier s
WHERE s.prodno = prod.prodno
)
WHERE EXISTS (SELECT 42
FROM supplier s2
WHERE s2.prodno = prod.prodno);使用MERGE可能更快(假设prodno是product中的主键):
merge into product
using
(
select p.prodno,
s.prod_supplier_id
from product p
join supplier s on s.prodno = p.prodno
) t on (t.prodno = prod.prodno)
when matched then update
set prod_supplier_id = t.prod_supplier_id;未测试!
发布于 2013-12-17 11:27:46
首先,创建一个备份表:
CREATE TABLE productBAK AS SELECT * FROM product;现在可以像这样使用update查询:
UPDATE product prod
SET prod.prod_supplier_id = (SELECT s.prod_supplier_id
FROM supplier s
WHERE s.prodno = prod.prodno and
s.prod_supplier_id is not null
)
WHERE prod.prodno in (SELECT s1.prodno FROM supplier s1 where s1.prod_supplier_id is not null);发布于 2013-12-17 09:45:17
WHERE子句指定应该更新的记录。如果您省略WHERE子句,所有记录将被更新!
https://stackoverflow.com/questions/20630619
复制相似问题