我有两张桌子
PARTSUPP - table
PS_PARTKEY
PS_SUPPKEY
PS_AVAILQTY
PS_SUPPLYCOST
PS_COMMENT
S_NAME
和
SUPPLIER - table
S_SUPPKEY
S_NAME
S_ADDRESS
S_NATIONKEY
S_PHONE
S_ACCTBAL
S_COMMENT
那我需要什么:
1 - 使用SUPPLIER.S_NAME迭代更新PARTSUPP.S_NAME,其中PARTSUPP.PS_SUPPKEY = SUPPLIER.S_SUPPKEY
答案 0 :(得分:1)
您需要执行此类操作并且可能表明您的数据库设计存在缺陷,这是不寻常的。出于性能原因,您是否故意将模型非规范化(并在其他表中缓存SUPPLIER.S_NAME)?如果没有,请考虑更改设计(即删除冗余的PARTSUPP.S_NAME并在运行时使用JOIN)。
话虽这么说,你可以按照这样的要求进行更新:
UPDATE PARTSUPP
SET S_NAME = (
SELECT S_NAME
FROM SUPPLIER
WHERE PARTSUPP.PS_SUPPKEY = SUPPLIER.S_SUPPKEY
)
答案 1 :(得分:1)
我认为你想要的是UPDATE PARTSUPP p SET S_NAME=(SELECT S_NAME FORM SUPPLIER s WHERE s.S_SUPPKEY=p.PS_SUPPKEY)
仍然你应该(如果拥有)删除partsuppp.s_name colum并在SELECT * FROM PARTSUPP LEFT JOIN SUPPLIER ON PS_SUPPKEY=S_SUPPKEY
中找到需要它的查询
然后你不需要更新它(还有关于数据库设计的更多信息)
答案 2 :(得分:1)
也可以使用连接而不是内部查询来完成:
UPDATE FROM PARTSUPP ps
INNER JOIN SUPPLIER s ON s.S_SUPPKEY = ps.PS_SUPPKEY
SET ps.S_NAME = s.S_NAME
WHERE ps.S_NAME <> s.S_NAME