如何插入到PostgreSQL的外键列?

时间:2018-12-01 01:23:50

标签: sql postgresql

也许这是一个愚蠢的问题,但是我有点卡在这里...所以我有一张桌子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);在其中创建了一个外键列,但是该外键列充满了{{1} },因为它不知道城市表与州表之间的关系。

如何用正确的状态ID填充外键列? 有人可以帮忙吗?

2 个答案:

答案 0 :(得分:2)

您可以在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;

答案 1 :(得分:-1)

您用于Mysql的SQL代码是:

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)
);

如果要添加新行并引用州表中的另一行,则需要添加该行的ID,例如:

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

1将是状态表中的ID!