SQL将2个匹配的行合并为一个

时间:2013-04-30 21:55:46

标签: sql

在为即将到来的考试进行试卷时,我和我的小组都被一个问题困扰了。

“编写一个SQL查询,它将返回一个包含所有结果对的表格。您的表格应列出每个竞争者的ID,两个事件ID和时间。”

对于下表:

compid eventid duration
1            1      150
1            2      167
1            3      133
2            2      145
2            3      182
3            3      179
3            1      179

我的目标是:

SELECT r1.compid, r1.duration, r1.eventid, r2.eventid
FROM Results r1, (
    SELECT eventid
    FROM Results r2
    WHERE r1.eventid = r2.eventid AND r1.compid = r2.compid AND r1.duration = r2.duration
) r2;

但我似乎无法从嵌套表中引用r1表。

如果有人能就解决方案的前提或如何解决这个问题给出任何指示,那就太棒了。

2 个答案:

答案 0 :(得分:1)

您将答案称为相关子查询,然后将连接条件放入子查询中。

from clauases中根本不允许相关的子查询。

但是,在适当的条件下,很容易将其称为简单的自联接。

我会让你解决这个问题。

顺便说一句,你有逻辑说明event_id是相同的。也许问题暗示了这一点,但没有明确说明。

答案 1 :(得分:0)

我没有意识到你可以自己加入一张桌子。但那之后很容易。干杯。任何有兴趣的人的解决方案:

SELECT r1.compid, r1.eventid, r2.eventid, r1.duration
FROM Results r1, Results r2
WHERE r1.compid = r2.compid AND r1.duration = r2.duration AND r1.eventid != r2.eventid
GROUP BY r1.duration