[更新:我正在使用MySQL 4.1.25]
我认为这一定很简单,但我是一个SQL菜鸟,需要一些帮助。我有一个查找表,如:
key1,value1
key2,value2
key3,value3
...
keyN,valueN
然后我有另一个表在一列中有一个随机的键列表(带有重复),我需要在相应的列中添加相关的值。
例如,第二个表可能是:
key3,?
key1,?
key1,?
key40 ,?
我需要将second_table
中的?替换为lookup_table
中的值,如下所示:
key3,value3
key1,value1
key1,value1
key40,value40
这似乎是一个简单的SQL查询应该解决的问题。有什么建议吗?
答案 0 :(得分:10)
在使用连接更新(而不是执行子查询)时,我更喜欢以下语法。它允许您在更新结果之前查看结果并知道查询是正确的。
select
st.key,
lt.value
--update st set value = lt.value
from
second_table st
inner join lookup_table lt on
st.key = lt.key
请注意,当您准备好进行更新时,请从update
开始选择所有内容。
更新:感谢tekBlues,我发现上述内容至少适用于SQL Server和Oracle。 MySQL的语法有点不同:
update
second_table st
inner join lookup_table lt on
st.key = lt.key
set
st.value = lt.value
那些是大型的RDBMS,所以希望其中一个是有用的。
答案 1 :(得分:6)
除了其他答案之外,你还可以通过加入来实现这一目标......
UPDATE second_table
SET value = L.value
FROM second_table S join lookup_table L on S.key = L.key
答案 2 :(得分:5)
update second_table
set value =
(select value from lookup_Table
where lookup_table.key = second_table.key)
答案 3 :(得分:0)
如果查找表是查询,一种选择是使用 PostgreSQL WITH clause。
WITH nested_table AS
(SELECT key, MAX(valA) as valA, MAX(valB) as valB
FROM ..
... JOIN/GROUP BY ...
)
UPDATE second_table
SET valA = nested_table.valA, valB = nested_table.valB
FROM nested_table
WHERE nested_table.key = second_table.key;