SQL-запрос: как изменить значение в соответствии с таблицей поиска? - PullRequest
7 голосов
/ 16 июня 2009

[обновление: я использую MySQL 4.1.25]

Я думаю, это должно быть просто, но я новичок в SQL и мне нужна помощь. У меня есть таблица поиска, которая выглядит примерно так:

lookup_table

ключ1, значение1
ключ2, значение2
ключ3, значение3
...
ключN, значениеN

Тогда у меня есть другая таблица, в которой есть случайный список ключей (с повторениями) в одном столбце, и мне нужно добавить соответствующие значения в соответствующий столбец.

Например, вторая таблица может быть:

second_table

key3,?
key1,?
key1,?
ключ40,?

Мне нужно заменить? S в second_table значениями из lookup_table следующим образом:

second_table (обновлено)

ключ3, значение3
ключ1, значение1
ключ1, значение1
ключ 40, значение 40

Это похоже на то, к чему должен обращаться простой запрос SQL. Есть предложения?

Ответы [ 3 ]

10 голосов
/ 16 июня 2009

Я предпочитаю следующий синтаксис при обновлении с объединением (вместо выполнения подзапроса). Он позволяет вам видеть результаты до того, как вы обновите их, и узнаете правильность запроса.

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

Это большие СУБД, так что, надеюсь, одна из них полезна.

6 голосов
/ 16 июня 2009

Наряду с другими ответами, вы также можете выполнить это с помощью объединения ...

UPDATE second_table
SET    value = L.value
FROM   second_table S join lookup_table L on S.key = L.key
5 голосов
/ 16 июня 2009
update second_table 
set value = 
(select value from lookup_Table
where lookup_table.key = second_table.key)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...