postgresql - postgreSQL 有一个表“xxx”的条目,但是不能从这部分查询中引用它
问题描述
编写此查询的正确方法是什么postgreSQL
?我正在尝试规范化(即标准化)地址。如果我给它一个硬编码的地址,我可以pagc
毫无问题地使用它。但是,我需要为它提供一个从部分解析的地址。我看到这里有几个关于堆栈溢出的类似问题引用了相同的错误。这些查询很复杂,而且都与我的完全不同,所以我无法通过阅读其他帖子找到解决方案。
我努力了:
with full_address as (home_address1 || ','|| home_city ||','|| home_state ||,','|| home_zip) update contacts set (home_house_num, home_predirection, home_street_name, home_street_type,home_postdirection, home_unit_num) = (addy.address_alphanumeric,addy.predirabbrev,addy.streetname, addy.streettypeabbrev,addy.postdirabbrev,addy.internal) FROM pagc_normalize_address(full_address) AS addy where contact_id = 833826;
这会引发错误:
“home_address1”或附近的语法错误第 26 行:full_address 为 (home_address1 || ','|| home_city |.
我也试过:
update contacts set (home_house_num, home_predirection, home_street_name, home_street_type,home_postdirection, home_unit_num) = (addy.address_alphanumeric,addy.predirabbrev,addy.streetname, addy.streettypeabbrev,addy.postdirabbrev,addy.internal) FROM pagc_normalize_address(home_address1 ||','||home_city||','||home_state||','||','||home_zip) AS addy where contact_id = 833826;
错误:
错误:对表“联系人”第 24 行的 FROM 子句条目的引用无效:...abbrev,addy.internal) FROM pagc_normalize_address(home_addre... ^ 提示:表“联系人”有一个条目,但不能从这部分查询引用 SQL 状态:42P10 字符:2297
解决方案
第一个查询是胡言乱语,第二个是有意义的但失败了,因为您不能在FROM
子句中使用对更新表的列的横向引用。
试试这样的 CTE:
WITH addy AS (
SELECT addy.* FROM
contacts
CROSS JOIN LATERAL
pagc_normalize_address(home_address1
|| ',' || home_city || ',' || home_state || ',' || ',' || home_zip) AS addy
WHERE contacts.contact_id = 833826
)
UPDATE contacts
SET (home_house_num, home_predirection, home_street_name, home_street_type,home_postdirection, home_unit_num)
= (addy.address_alphanumeric,addy.predirabbrev,addy.streetname, addy.streettypeabbrev,addy.postdirabbrev,addy.internal)
FROM addy
WHERE contact_id = 833826;
推荐阅读
- python - Networkx 绘制弯曲边缘仅适用于有向图而不适用于图
- msix - MSIX 侧载应用在更新后启动缓慢
- sql - 在 where 子句子查询中使用 DISTINCT 查找唯一的列组合
- php - Laravel:在 web.php 中找不到类“App\Models\Device”(仅在生产中)
- javascript - Selenium-webdriver,我无法进入模态窗口
- jq - 为什么这个 jq 管道不需要点?
- android - Android gradle 插件更新到版本 7.0
- bash - 提高 bash 脚本的性能
- php - 如何使用 PHP 和 mssql_connect 将表情符号插入 SQL Server?
- javascript - Fabric JS 在运行 toDataURL 时会排除画布之外的所有对象和对象部分