根据另一个字段选择具有重复字段的行

时间:2012-10-03 15:16:09

标签: mysql duplicates

我正在努力解决这个棘手的问题。 我有一个类似于以下的mysql表:

Category      Model      Description
cat1           AAA       Triple A
cat1/cat2      AAA       Triple A
cat1/cat2      BBB       Triple B
cat1           BBB       Triple B
cat3           CCC       Triple C
cat3/cat4/cat5 CCC       Triple C
cat3/cat4      CCC       Triple C

我想选择具有唯一模型和“最长”类别的行。基本上我想获得:

Category      Model      Description
cat1/cat2      AAA       Triple A
cat1/cat2      BBB       Triple B
cat3/cat4/cat5 CCC       Triple C

任何提示?

3 个答案:

答案 0 :(得分:4)

select m.*
from MyTable m
inner join (
    select Model, max(char_length(Category)) as MaxLen
    from MyTable
    group by Model
) mm on m.Model = mm.Model and char_length(m.Category) = mm.MaxLen

事实上,您可能想要最深的类别而不是最长的类别。如果是这种情况,那么有比上面更好的选择。

答案 1 :(得分:3)

根据您提供的数据,以下内容将起作用:

select max(category), Model, Description
from t
group by Model, Description

这是因为“cat1”< “cat1 / cat2”等等。

答案 2 :(得分:1)

如果“longuest”表示类别中/的最大数量(应该是),请尝试以下操作:

SELECT
    t.Category
    , t.Model
    , t.Description
FROM
    t
    INNER JOIN
    (
        SELECT
            Model
            , MAX(CHAR_LENGTH(Category) - CHAR_LENGTH(REPLACE(Category, '/', ''))) AS Depth
        FROM
            t
        GROUP BY
            Model
    ) AS tmax
        ON t.Model = tmax.Model
        AND CHAR_LENGTH(t.Category) - CHAR_LENGTH(REPLACE(t.Category, '/', '')) = tmax.Depth

此外,它似乎有效:http://sqlfiddle.com/#!2/725e5/3/0