在插入/更新过程中使用除主键之外的其他字段作为ID

时间:2018-07-19 11:40:11

标签: sql postgresql

我有这张桌子:

CREATE TABLE properties(
  id SERIAL,
  external_id VARCHAR
)

CREATE TABLE things(
  id SERIAL,
  external_id VARCHAR,
  property_id INTEGER,
  CONSTRAINT things_property_id_fkey FOREIGN KEY (property_id)
  REFERENCES properties(id)
)

外部软件需要在表中插入/更新记录,但不了解id字段-仅了解external_id。所以它不能只是做

UPDATE things SET property_id = 'foo123' WHERE external_id ='Boo567'

-它必须首先用properties在表external_id = "foo123"中找到记录的主键。在Postgresql中最有效的方法是什么? external_id被索引并唯一。

更新 看来我还不够清楚。上面的UPDATE语句存在的问题是propertiesid = 'foo123'的位置没有记录。但是有external_id = 'foo123'的记录,但是我不能直接使用external_id来引用记录。

1 个答案:

答案 0 :(得分:1)

我认为这就是您要寻找的

UPDATE
    things
SET
    property_id = (
        SELECT id
        FROM properties
        WHERE external_id = 'foo123'
    )
WHERE
    external_id ='Boo567'

它称为子查询。