首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除自连接中的重复关系

问删除自连接中的重复关系
EN

Stack Overflow用户
提问于 2018-01-18 13:50:02
回答 3查看 2.1K关注 0票数 2

我需要自己联接一个表的标准,即id不应该相同,但市场应该是相同的,这样我发现了不同id的相关市场,但在这样做的过程中,我得到了类似1-3和3-1的重复关系,但我不需要这两个条目,我只需要第一个1-3表中有数百万行,所以请帮助我优化这个查询。

代码语言:javascript
复制
 declare @tbl table (id int   , market varchar(100))

 insert into @tbl (id,market)
 values(1,'abc'),(2,'xyz'),(3,'abc')

 select a.id , a.market , b.id ,b.market 
 from  @tbl a join  @tbl b 
 on a.id <> b.id 
 and a.market = b.market 
EN

回答 3

Stack Overflow用户

发布于 2018-01-18 14:06:06

干净而简单

代码语言:javascript
复制
select abc.id, abc.market , xyz.id , xyz.market
from  @tbl abc join  @tbl xyz
on abc.id <> xyz.id and abc.market = xyz.market and abc.id < xyz.id

Working SQL Fiddle

票数 3
EN

Stack Overflow用户

发布于 2018-01-18 14:02:21

尝试以下代码:

代码语言:javascript
复制
select a.id , b.id , a.market
from  @tbl a join  @tbl b 
on a.id <> b.id and a.market = b.market and a.id < b.id

希望这能有所帮助!

票数 1
EN

Stack Overflow用户

发布于 2018-01-18 14:32:25

尝试这个:它会将id视为字母数字。首先使用subquery返回不等于IDs的重复market的集合,然后像您在示例中所做的那样连接

代码语言:javascript
复制
SELECT t.id, t.market, t1.id, t1.market
FROM(
    SELECT market, MIN(id) id
    FROM @tbl
    GROUP BY market HAVING COUNT(DISTINCT id) > 1) t
INNER JOIN @tbl t1 ON t1.market = t.market
    AND t1.id <> t.id   
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48314628

复制
相关文章

相似问题

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