我有下表:
???????????????????????
? USERID ? LANGUAGEID ?
???????????????????????
? 1 ? 2 ?
? 1 ? 7 ?
? 1 ? 8 ?
? 2 ? 10 ?
? 2 ? 3 ?
???????????????????????
Run Code Online (Sandbox Code Playgroud)
现在我想为每个用户创建所有可能的语言对,这意味着我希望结果集为:对于用户1:(2,7),(7,8),(2,8)
对于用户2:(10,3)
这样做我已经完成了以下查询:
SELECT a.userId , a.LanguageId, b.LanguageId
FROM knownlanguages a, knownlanguages b
WHERE a.userID=b.userID
AND a.LanguageId<>b.LanguageId
Run Code Online (Sandbox Code Playgroud)
我得到的结果是用户1:(2,7),(7,8),(2,8),(7,2),(8,7),(8,2)
对于用户2:(10,3),(3,10)
(10,3)和(3,10)之间没有区别
如何删除重复的行?
TNX
dan*_*era 25
使用您的标识符:
SELECT a.userId , a.LanguageId, b.LanguageId
FROM knownlanguages a inner join knownlanguages b
on a.userID=b.userID and a.LanguageId < b.LanguageId
Run Code Online (Sandbox Code Playgroud)
测试:Fot表:
create table t ( u int, l int);
insert into t values
( 1, 2),
( 1, 7),
( 1, 8),
( 2, 10),
( 2, 3);
Run Code Online (Sandbox Code Playgroud)
查询是:
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
Run Code Online (Sandbox Code Playgroud)
(结果)
SELECT userId,\n LEAST(LANG_ID1, LANG_ID2) ID1,\n GREATEST(LANG_ID1, LANG_ID2) ID2\nFROM\n (\n SELECT a.userId, \n a.LanguageId LANG_ID1, \n b.LanguageId LANG_ID2\n FROM knownlanguages a, knownlanguages b \n WHERE a.userID=b.userID AND \n a.LanguageId <> b.LanguageId\n ) s\nGROUP BY userId, ID1, ID2\nRun Code Online (Sandbox Code Playgroud)\n\n输出,
\n\n\xe2\x95\x94\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa6\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa6\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x97\n\xe2\x95\x91 USERID \xe2\x95\x91 ID1 \xe2\x95\x91 ID2 \xe2\x95\x91\n\xe2\x95\xa0\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xac\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xac\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa3\n\xe2\x95\x91 1 \xe2\x95\x91 2 \xe2\x95\x91 7 \xe2\x95\x91\n\xe2\x95\x91 1 \xe2\x95\x91 2 \xe2\x95\x91 8 \xe2\x95\x91\n\xe2\x95\x91 1 \xe2\x95\x91 7 \xe2\x95\x91 8 \xe2\x95\x91\n\xe2\x95\x91 2 \xe2\x95\x91 3 \xe2\x95\x91 10 \xe2\x95\x91\n\xe2\x95\x9a\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa9\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa9\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x9d\nRun Code Online (Sandbox Code Playgroud)\n\n或者简单地说,
\n\n SELECT a.userId, \n a.LanguageId LANG_ID1, \n b.LanguageId LANG_ID2\n FROM knownlanguages a, knownlanguages b \n WHERE a.userID=b.userID AND \n a.LanguageId < b.LanguageId\nRun Code Online (Sandbox Code Playgroud)\n