首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PGSQL -在复杂条件下连接两个表

PGSQL -在复杂条件下连接两个表
EN

Stack Overflow用户
提问于 2013-05-15 20:47:14
回答 2查看 245关注 0票数 0

我在PostgreSQL上迁移数据库的时候卡住了,需要你的帮助。

我有两个表需要连接: drzewa_mateczne.migracja (我需要迁移的数据)和ibl_as.t_adres_lesny (我需要与migracja连接的字典)。

我需要在replace(drzewa_mateczne.migracja.adresy_lesne,‘','') = replace(ibl_as.t_adres_lesny.adres,’','')上加入它们。然而,我的数据不是很规则,所以我想在第一次与字典良好匹配时加入它。

我创建了以下查询:

代码语言:javascript
复制
select
count(*)

from
drzewa_mateczne.migracja a

where
length(a.adresy_lesne) > 0
and replace(a.adresy_lesne, ' ', '') = (select substr(replace(al.adres, ' ', ''), 1, length(replace(a.adresy_lesne, ' ', ''))) from ibl_as.t_adres_lesny al limit 1)

查询不返回任何行。如果没有运行,它会成功地联接空行。

代码语言:javascript
复制
length(a.adresy_lesne) > 0

以下两个查询返回行(正如预期的那样):

代码语言:javascript
复制
select replace(adres, ' ', '') 
from ibl_as.t_adres_lesny
where substr(replace(adres, ' ', ''), 1, 16) = '16-15-1-13-180-c'
limit 1


select replace(adresy_lesne, ' ', ''), length(replace(adresy_lesne, ' ', '')) 
from drzewa_mateczne.migracja
where replace(adresy_lesne, ' ', '') = '16-15-1-13-180-c'

我怀疑我的查询中“where”子句内的子查询可能存在问题。如果你们能帮我解决这个问题,或者至少给我指明正确的方向,我会非常高兴。

先谢谢你,Jan

EN

回答 2

Stack Overflow用户

发布于 2013-05-15 21:53:38

您可以在很大程度上简化为:

代码语言:javascript
复制
SELECT count(*)
FROM   drzewa_mateczne.migracja a
WHERE  a.adresy_lesne <> ''
AND    EXISTS (
   SELECT 1 FROM ibl_as.t_adres_lesny al 
   WHERE  replace(al.adres, ' ', '')
    LIKE (replace(a.adresy_lesne, ' ', '') || '%')
   )

  • a.adresy_lesne <> ''的作用与length(a.adresy_lesne) > 0相同,只是使用EXISTS半连接来连接相关子查询(以便每行只有一个匹配)。
  • 将复杂的字符串结构替换为简单的LIKE表达式。

有关模式匹配和索引支持的更多信息,请参阅以下相关答案:

PostgreSQL LIKE query performance variations

Difference between LIKE and ~ in Postgres

speeding up wildcard text lookups

票数 1
EN

Stack Overflow用户

发布于 2013-05-15 21:05:52

基本上,您告诉数据库要做的是从drzewa_mateczne.migracja中获取具有非空adresy_lesne字段的行数,该字段是半随机ibl_as.t_adres_lesny行的adres字段的前缀……

去掉子查询中的"limit 1“,用" in”替换"=“,看看这是不是您想要的……

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16565416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档