2013-12-19 24 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