2012-02-03 2 views
2

Я хочу сделать что-то вроде этого.Обновление столбца на основе SELECT с параметром, поступающим с UPDATE

UPDATE tbl_states AS ts 
SET tbl_states.country_id = (SELECT tbl_countries.country_id 
           FROM tbl_states ts1 
             JOIN tbl_countries 
             ON tbl_countries.country_id_id = 
              ts1.country_id 
           WHERE ts1.country_id_id = ts.country_id_id) 

Я хочу обновить старыйcountry_id который пришел из другой базы данных для новогоcountry_id на основе новых первичных ключей, вставляемых в новой базе данных. Чтобы дать вам представление, вот схема.

CREATE TABLE [dbo].[tbl_countries](
    [country_id] [int] IDENTITY(1,1) NOT NULL, 
    [country_id_id] [int] NULL, 
    [country_name] [varchar](50) NULL) 

country_id_id является старыйcountry_id ссылается на следующей таблице я покажу вам tbl_states

CREATE TABLE [dbo].[tbl_states](
    [state_id] [int] IDENTITY(1,1) NOT NULL, 
    [state_name] [varchar](50) NULL, 
    [country_id] [int] NULL, 
    [state_abbr] [char](3) NOT NULL) 

Я хочу обновить country_id столбец этой таблицы tbl_states к первичной колонке приведенной выше таблицы, используя следующий оператор select, чтобы получить первичный ключ.

SELECT tbl_countries.country_id 
FROM tbl_states_old 
     JOIN tbl_countries 
     ON tbl_countries.country_id_id = tbl_states_old.country_id 

Извините за заголовок, я не знаю, как это называется. Не могли бы вы мне помочь?

+0

+1 Я понятия не имел, как это назвать! К счастью (иногда) Google может читать мысли ... – WienerDog

ответ

3
UPDATE s 
    SET country_id = c.country_id 
    FROM tbl_states s 
     INNER JOIN tbl_countries c 
      ON s.country_id = c.country_id_id 
+0

стрелять, еще не спал ха-ха. Благодаря! –

Смежные вопросы