如何从链接 table 更新 table?
How to update table from linking table?
我正在使用 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 秒才能完成。
使用 FROM
clause of UPDATE
加入 temp_zip_type
和 zip_code_type
并在一个简单的语句中完成所有操作:
UPDATE zip_code z
SET type_id = t.id
FROM temp_zip_type tmp
JOIN zip_code_type t ON t.value = tmp.temp_type
WHERE z.zip_5_digit = tmp.temp_zip
AND z.type_id IS DISTINCT FROM t.id; -- avoid empty updates
我添加了最后一行以避免空更新。它可能有用也可能没有用。详情:
- How do I (or can I) SELECT DISTINCT on multiple columns?
我正在使用 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 秒才能完成。
使用 FROM
clause of UPDATE
加入 temp_zip_type
和 zip_code_type
并在一个简单的语句中完成所有操作:
UPDATE zip_code z
SET type_id = t.id
FROM temp_zip_type tmp
JOIN zip_code_type t ON t.value = tmp.temp_type
WHERE z.zip_5_digit = tmp.temp_zip
AND z.type_id IS DISTINCT FROM t.id; -- avoid empty updates
我添加了最后一行以避免空更新。它可能有用也可能没有用。详情:
- How do I (or can I) SELECT DISTINCT on multiple columns?