首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Postgresql中,需要查询以列出两列相对相同的行

在Postgresql中,需要查询以列出两列相对相同的行
EN

Stack Overflow用户
提问于 2019-01-25 11:24:34
回答 1查看 26关注 0票数 1

大多数情况下,在两个表之间比较两个或更多列的相同值。我需要比较表中的两列,其中相对于另一列使用了3个所有者值。这将是3个不同的名字。

我见过表比较,但这是在一个表中,并且数据已经由一个列值分隔。该表有数千行。Owner列只有三个不同的名称。

所以Joe,Sam和Jim有一排排的名字。当这两个人中的任何一个在行中列出了共同的名字和姓氏时,他们将与位置和邮政编码等其他列数据一起作为输出列出。因此,如果Joe和Sam有两个通用名称,则输出将列出:

代码语言:javascript
运行
复制
Owner,firstname,lastname,location,zip

Joe,Bob,Smith,Dallas,37377

Sam,Bob,Smith,Dallas,37377

Jim没有Bob,Smith,Dallas,37377,所以它没有与Joe和Sam一起列在组中。总而言之,结果将是这3个所有者的几百行分组,其中找到了一个通用名称。我需要在查询中使用百分比,以防有人使用Bobby或Smiths。因此,像Smithson这样的名字将会出现,但我会调整。

我把这些都打出来了,页面认为它是代码,所以我道歉,我不得不缩写。

EN

回答 1

Stack Overflow用户

发布于 2019-01-25 13:44:05

可以使用的最直接的方法是自连接,尽管EXISTS可能更快。

首先,自连接:

代码语言:javascript
运行
复制
--note DISTINCT here because if Joe, Bob, and Sam all have records with the name we don't want duplicates
select DISTINCT f.owner, f.firstname, f.lastname, f.location, f.zip
from tablename f
join tablename s on f.firstname = s.firstname and f.lastname = s.lastname and f.owner <> s.owner

然后,使用EXISTS:

代码语言:javascript
运行
复制
select f.owner, f.firstname, f.lastname, f.location, f.zip
from tablename f
WHERE EXISTS(select 1 from tablename s WHERE s.firstname = f.firstname and s.lastname = f.lastname and s.owner <> f.owner)

当然,如果你想要'Smith‘和'smithson’匹配而不是相等,你可以用下面这样的东西来代替相等比较:(f.firstname ilike (s.firstname||'%') OR s.firstname ilike (f.firstname||'%'))你可以使用(f.firstname ilike (s.firstname||'%') OR s.firstname ilike (f.firstname||'%'))(或任何其他比较)

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

https://stackoverflow.com/questions/54358547

复制
相关文章

相似问题

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