SQL查询生成所有组合

时间:2014-06-18 19:40:11

标签: sql

我已经搜索过但看起来却无法让SQL查询按照我的需要运行。我有这些数据:

10019201        GEE78316634770
10019201        SIE78308706478
10019202        GEE78316634773
10019202        SIE78308706477
10019202        SIE78308706499
10019202        SIE78308706900
10019501        SIE78308706917
10019501        GEE78316634930

我想基于第一列匹配的事实创建以下输出,以下输出:

GEE78316634770     SIE78308706478
SIE78308706478     GEE78316634770
GEE78316634773     SIE78308706477
GEE78316634773     SIE78308706499
GEE78316634773     SIE78308706900
SIE78308706477     GEE78316634773
SIE78308706477     SIE78308706499
SIE78308706477     SIE78308706900
SIE78308706499     GEE78316634773
SIE78308706499     SIE78308706477
SIE78308706499     SIE78308706900
SIE78308706900     GEE78316634773
SIE78308706900     SIE78308706477
SIE78308706900     SIE78308706499
SIE78308706917     GEE78316634930
GEE78316634930     SIE78308706917

所以10019201的前两个记录在结果中匹配为

GEE78316634770     SIE78308706478
SIE78308706478     GEE78316634770

下一组10019202的记录 - 有四场比赛,结果如下:

GEE78316634773     SIE78308706477
GEE78316634773     SIE78308706499
GEE78316634773     SIE78308706900
SIE78308706477     GEE78316634773
SIE78308706477     SIE78308706499
SIE78308706477     SIE78308706900
SIE78308706499     GEE78316634773
SIE78308706499     SIE78308706477
SIE78308706499     SIE78308706900
SIE78308706900     GEE78316634773
SIE78308706900     SIE78308706477
SIE78308706900     SIE78308706499

每一个与其他3个匹配。

有人可以帮我查询以获得我需要的结果吗?

谢谢! 莱斯利

1 个答案:

答案 0 :(得分:3)

使用自我加入:

{使用列名IDValue只是为了显示语法}

SELECT 
    t1.Value Value1,
    t2.Value Value2
FROM table t1
INNER JOIN table t2 
    ON t1.ID = t2.ID
    AND t1.Value <> t2.Value