我想更新一个表的列:
UPDATE product prod
SET prod.prod_supplier_id = (SELECT s.prod_supplier_id
FROM supplier s
WHERE s.prodno = prod.prodno
)
SELECT s.prod_supplier_id
FROM supplier s
WHERE s.prodno = prod.prodno
不能返回null结果,如果为null,则不会进行更新 怎么做?
答案 0 :(得分:4)
您还需要在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;
未经过测试!
答案 1 :(得分:1)
首先创建一个备份表:
CREATE TABLE productBAK AS SELECT * FROM product;
现在你可以像这样使用更新查询:
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);
答案 2 :(得分:0)
WHERE子句指定应更新的记录。如果省略WHERE子句,则所有记录都将更新!
答案 3 :(得分:0)
我认为prod_supplier_id是产品和供应商的专栏。
你能解释prod_supplier_id在哪个表中不能为空吗? 查看您的查询,您需要类似
的内容update product
set prod_supplier_id = (select prod_supplier_id
from supplier
where prod_supplier_id is not null);
您面临的问题:
你能告诉我们:
[R