Как вставить в столбцы внешнего ключа в postgresql? - PullRequest
0 голосов
/ 01 декабря 2018

Может быть, это глупый вопрос, но я застрял здесь ... Итак, у меня есть таблица A

state | city
MI     Detroit
... 

И у меня есть таблица состояний B

state_id | state
1           MI
...

И таблица города C

city_id | city | state_id
1        Detroit  NULL

Я хочу добавить столбец внешнего ключа в таблицу city, я уже создал в нем столбец внешнего ключа с синтаксисом ALTER TABLE city ADD CONSTRAINT city_state FOREIGN KEY (state_id) REFERENCES state(state_id); Но внешнийключевой столбец был заполнен null, поскольку он не знает связи между таблицей городов и таблицей состояний.

Как заполнить столбец внешнего ключа правильным идентификатором состояния?Может кто-нибудь помочь?

Ответы [ 2 ]

0 голосов
/ 01 декабря 2018

Ваш код SQL для Mysql:

CREATE TABLE city (
    city_id int NOT NULL,
    name varchar(255) NOT NULL,
    state_id int,
    PRIMARY KEY (city_id),
    FOREIGN KEY (state_id) REFERENCES state(state_id)
);

И если вы хотите добавить новую строку со ссылкой на другую строку в таблице состояний, вам нужно добавить идентификатор этой строки, например:

INSERT INTO city VALUES  (1, "Los Angeles", 1);

1 будет идентификатором из таблицы состояний!

0 голосов
/ 01 декабря 2018

Вы можете использовать join в update.В Postgres это выглядит так:

update city
   set state_id = b.state_id
   from a join
        b
        on a.state = b.state
   where city.city = a.city;

В MySQL:

update city join
       a
       on city.city = a.city join
       b
       on a.state = b.state
   set city.state_id = b.state_id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...