SQL查询:如何根据查找表更改值?

时间:2009-06-16 14:57:23

标签: sql

[更新:我正在使用MySQL 4.1.25]

我认为这一定很简单,但我是一个SQL菜鸟,需要一些帮助。我有一个查找表,如:

lookup_table

key1,value1
key2,value2
key3,value3
...
keyN,valueN

然后我有另一个表在一列中有一个随机的键列表(带有重复),我需要在相应的列中添加相关的值。

例如,第二个表可能是:

second_table

key3,?
key1,?
key1,?
key40 ,?

我需要将second_table中的?替换为lookup_table中的值,如下所示:

second_table(已更新)

key3,value3
key1,value1
key1,value1
key40,value40

这似乎是一个简单的SQL查询应该解决的问题。有什么建议吗?

4 个答案:

答案 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;