2011-08-04 35 views
1

我有一張桌子,裏面有一些成對的分數。在多列中查詢相同的東西?

像這樣

P1 P2 Score Date 
John Mark 43  2011-01-01 
Sinan Ash 53  2011-02-03 
... 
John Suzie 34  2011-10-10 
Ash Sinan 54  2011-11-11 
sinan suzie 42  2011-12-12 
... 

所以,我想要的是得到思南和他的合作伙伴所有的分數。 我想獲得的東西llike:

partner - score 
ash  53 
ash  54 
suzie  42 

我想下面TE查詢做到這一點。有沒有比

更好的查詢方式
select * from table WHERE P1 = 'sinan' OR P2 = 'sinan' 

這樣高效嗎?也許有一個更好的方法來存儲數據。 有什麼建議嗎?

+1

有多大的數據表的例子嗎?這可能是最簡單的方法,即使它在技術上沒有標準化。除非你需要真正的高性能,否則我不會再費心去優化它。 – mellamokb

+0

大約有600000行和800000行 – Sinan

回答

3

真正的技巧是交替P1和P2之間的夥伴。最簡單的方法可能是:

SELECT P2 AS partner, Score 
    FROM table 
    WHERE P1 = 'sinan' 
UNION ALL 
SELECT P1 AS partner, Score 
    FROM table 
    WHERE P2 = 'sinan' 
+1

您認爲帶有OR子句的case語句比union更好嗎? '當p1 ='sinan'時選擇案例,然後p2 else p1從p1 ='sinan'或p2 ='sinan''的表格結束爲合作伙伴 –

+0

@Derek:這也是一個很好的建議。當你的評論進來時,我實際上會添加它作爲一個替代選項。我建議兩個基準。 –

0

下面是一個使用CASE語句

SELECT CASE WHEN P1 = 'Sinan' THEN P2 ELSE P1 END AS Partner, Score 
FROM ScoreTable 
WHERE P1 = 'Sinan' OR P2 = 'Sinan' 
相關問題