我有这张桌子:
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
语句存在的问题是properties
中id = 'foo123'
的位置没有记录。但是有external_id = 'foo123'
的记录,但是我不能直接使用external_id
来引用记录。
答案 0 :(得分:1)
我认为这就是您要寻找的
UPDATE
things
SET
property_id = (
SELECT id
FROM properties
WHERE external_id = 'foo123'
)
WHERE
external_id ='Boo567'
它称为子查询。