sql自联接表删除重复的行 [英] sql self-join table remove duplicate lines

查看:65
本文介绍了sql自联接表删除重复的行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有下表:

╔════════╦════════════╗
║ USERID ║ LANGUAGEID ║
╠════════╬════════════╣
║      1 ║          2 ║
║      1 ║          7 ║
║      1 ║          8 ║
║      2 ║         10 ║
║      2 ║          3 ║
╚════════╩════════════╝

现在我想为每个用户创建所有可能的语言对 这意味着我希望结果集为: 对于用户1:(2,7),(7,8),(2,8)

now I want to create all the possible pairs of languages for each user which means that I want the result set to be: for user 1: (2,7), (7,8), (2,8)

对于用户2:(10,3)

for user 2: (10,3)

为此,我完成了以下查询:

to do so I've done the following query:

SELECT a.userId , a.LanguageId, b.LanguageId
FROM knownlanguages a, knownlanguages b  
WHERE a.userID=b.userID  
AND a.LanguageId<>b.LanguageId

我得到的结果是 对于用户1:(2,7),(7,8),(2,8),(7,2),(8,7),(8,2)

the result that i'm getting is for user 1: (2,7), (7,8), (2,8) , (7,2), (8,7), (8,2)

对于用户2:(10,3),(3,10)

for user 2: (10,3), (3,10)

(10,3)和(3,10)之间对我来说没有区别

there is no difference for me between (10,3) and (3,10)

如何删除重复的行?

tnx

推荐答案

使用您的标识符:

SELECT a.userId , a.LanguageId, b.LanguageId
  FROM knownlanguages a inner join knownlanguages b  
    on a.userID=b.userID and a.LanguageId < b.LanguageId

测试:FOT表:

create table t ( u int, l int);

insert into t values 
(    1,               2),
(    1,               7),
(    1,               8),
(    2,               10),
(    2,               3);

查询是:

select t1.u, t1.l as l1, t2.l as l2
from t t1 inner join t t2
   on t1.u = t2.u and t1.l < t2.l

(结果)

这篇关于sql自联接表删除重复的行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆