2011-08-22 28 views
0

例如:如何在mysql SELECT中用優先級替換行?

code, attr, val, precedence 
(0, 'key', 'value1', 1) 
(1, 'key', 'value2', 1) 
(2, 'key', 'value3', 1) 
(3, 'key2', 'value1', 1) 
(4, 'key3', 'value1', 1) 
(5, 'key', 'nothis', 2) 
(6, 'key', 'final_value', 3) 

我想是這樣的:

(6, 'key', 'final_value', 3) 
(3, 'key2', 'value1', 1) 
(4, 'key3', 'value1', 1) 

如何做到這一點,在MySQL的?

回答

2

使用id的最大優先級列表進行連接。類似的東西:

SELECT * 
FROM a 
    INNER JOIN (SELECT attr, MAX(precedence) p FROM a) m 
     ON m.attr = a.attr AND m.p = a.precedence 
    GROUP BY a.attr; 

每個屬性只有一行分組;可以用SELECT子句上的DISTINCT代替