2013-04-30 63 views
1

在通過即將進行的考試的測試文件時,我和我的團隊都被一個問題困住了。 「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表。

如果任何人都可以給出解決方案的前提或如何解決這個問題的任何方向,那就太好了。

+1

我建議使用持續時間自我加入。你還需要一個條款以獲得「配對」。 – 2013-04-30 21:58:14

回答

1

您正在將您的答案作爲相關子查詢,然後將加入條件置於子查詢中。

相關的子查詢根本不允許在from clauases中。

但是,在適當的條件下很容易將其作爲簡單的自連接進行表述。

我會讓你找出特定的查詢。

順便說一下,你有邏輯說,event_id是相同的。也許這個問題是隱含的,但沒有明確說明。

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 
+0

良好的開端,但它沒有回答問題,因爲它被問到。你需要有一個條款來限制你的答案。 – 2013-04-30 23:02:11