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

Gre*_*reg 8 sql

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

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

查找表

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

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

例如,第二个表可能是:

second_table

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

我需要second_table用以下值替换?s lookup_table:

second_table(更新)

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

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

Eri*_*ric 11

使用连接更新(而不是执行子查询)时,我更喜欢以下语法.它允许您在更新结果之前查看结果并知道查询的正确性.

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
Run Code Online (Sandbox Code Playgroud)

请注意,当您准备好更新时,请从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
Run Code Online (Sandbox Code Playgroud)

这些是大型RDBMS,所以希望其中一个是有用的.


Sco*_*vey 7

除了其他答案,您还可以通过加入完成此操作...

UPDATE second_table
SET    value = L.value
FROM   second_table S join lookup_table L on S.key = L.key
Run Code Online (Sandbox Code Playgroud)


tek*_*ues 5

update second_table 
set value = 
(select value from lookup_Table
where lookup_table.key = second_table.key)
Run Code Online (Sandbox Code Playgroud)