【发布时间】:2015-03-18 09:31:41
【问题描述】:
我正在使用 PostgreSQL 数据库并在这里在黑暗中查询。我有三 (3) 个表:zip_code、zip_code_type 和 temp_zip_type。它们具有以下列:
zip_code
zip_5_digit text
type_id integer
zip_code_type
id integer
value text
temp_zip_type
temp_zip text
temp_type text
我正在尝试更新zip_code 和设置zip_code.type_id = zip_code_type.id,以便zip_code.zip_5_digit 与temp_zip_type.temp_zip 匹配,并且temp_zip_type.temp_type 匹配zip_code_type.value。
这是我的尝试:
UPDATE
zip_code
SET
type_id =
(
SELECT
id
FROM
zip_code_type
JOIN
temp_zip_type
ON
temp_type = value
WHERE
temp_zip = zip_5_digit
);
我正在寻找的结果是 type_id 通过查找表中的值来匹配 zip_code_type.id 中的值。
解决方法
我更改了temp_zip_type 并添加了一个名为temp_type_id 的整数列。我通过执行以下查询得到了我想要的结果:
UPDATE
temp_zip_type
SET
temp_type_id =
(
SELECT
id
FROM
zip_code_type
WHERE
temp_type = value
);
UPDATE
zip_code
SET
type_id =
(
SELECT
temp_type_id
FROM
temp_zip_type
WHERE
zip_5_digit = temp_zip
);
为了以后参考,有没有更高效的查询?完成这些查询需要 147 秒。
【问题讨论】:
-
解释似乎比它必须的要复杂。最重要的是,您的表定义中没有
temp_type_id。 -
@ErwinBrandstetter 我忘了提到我更改了表格以使我的查询正常工作。
标签: sql postgresql join sql-update