2013-12-19 33 views
0

條件兩行的列我有以下表結構:添加基於MySQL的

 
+------+-------+-------+--------+ 
| mid | a  | b  | points | 
+------+-------+-------+--------+ 
| 69 | 3137 | 13316 | 210 | 
| 70 | 13316 | 3137 | 350 | 
| 71 | 3497 | 13316 | 200 | 
| 72 | 13316 | 3497 |  25 | 
| 73 | 3605 | 13316 | 205 | 
| 74 | 13316 | 3605 | 290 | 
+------+-------+-------+--------+ 

我想補充的「點」兩行的值時,第1行=「B「一」 「行2和‘’的第2行=‘行b’1

的輸出要求是這樣的:

 
+------+-------+-------+--------+ 
| mid | a  | b  | points | 
+------+-------+-------+--------+ 
| 69 | 3137 | 13316 | 560 | 
| 71 | 3497 | 13316 | 225 | 
| 73 | 3605 | 13316 | 495 | 
+------+-------+-------+--------+ 

回答

0

,您可以嘗試這樣

SELECT t1.mid, t1.a, t1.b, t1.points + t2.points points 
    FROM table1 t1 JOIN table1 t2 
    ON t1.a = t2.b 
    AND t1.b = t2.a 
    AND t1.mid < t2.mid 

或利用MySQL的非標準GROUP BY擴展

SELECT mid, a, b, SUM(points) points 
    FROM 
(
    SELECT mid, a, b, points 
    FROM table1 
    ORDER BY mid 
) q 
GROUP BY LEAST(a, b), GREATEST(a, b) 

輸出:

 
| MID | A |  B | POINTS | 
|-----|------|-------|--------| 
| 69 | 3137 | 13316 | 560 | 
| 71 | 3497 | 13316 | 225 | 
| 73 | 3605 | 13316 | 495 | 

這裏是SQLFiddle演示

+0

非常感謝peterm :)這正是我正在尋找的掃管笏。你節省了很多時間,並感謝及時回覆。 – user3118436

+0

@ user3118436你更受歡迎。祝你好運:) – peterm

+0

還有一個問題,你可以看看這個鏈接http://sqlfiddle.com/#!2/aa462/1。我稍微改變了模式。我想確保13316總是在列「b」中。你能幫我在這裏嗎? – user3118436

0

如果我理解正確的話,那麼你想要的:

SELECT p1.mid, p1.a, p1.b, p1.points + p2.points points 
FROM points p1 
INNER JOIN points p2 ON p1.a = p2.b AND p1.b = p2.a 
WHERE p1.mid < p2.mid 

我在sql fiddle敲了起來,給你想要的輸出。

+0

得到了解決方案凱文。感謝您的答覆。 – user3118436