查找具有相同列值而不是另一列值的行

时间:2015-05-21 05:19:44

标签: mysql

我有一个像这样的表结构:

ProductId | Parentid | Name

1 | 1 | Abc

2 | 1 | Abc

3 | 2 | Xyz

4 | 3 | Xyz

5 | 3 | Abc

我需要一个查询来查找这些行,这些行的parentid与其他行相同,但名称与另一行不同。

例如:查询应该获取结果,因为两行的parentid相同,但名称不相同。

4 | 3 | Xyz

5 | 3 | Abc

有人可以帮助形成查询吗?

1 个答案:

答案 0 :(得分:3)

一种方法是:

SELECT ProductId, ParentId, Name
FROM mytable 
WHERE ParentId IN (
  SELECT Parentid
  FROM mytable
  GROUP BY Parentid
  HAVING MIN(Name) <> MAX(Name))

SQL Fiddle Demo

您也可以使用INNER JOIN

SELECT ProductId, m.ParentId, Name
FROM mytable m
INNER JOIN (SELECT Parentid
            FROM mytable
            GROUP BY Parentid
            HAVING MIN(Name) <> MAX(Name)) t
ON m.ParentId = t.ParentId            

SQL Fiddle Demo

最后请注意,如果您希望Name列中的所有值不同,则必须使用以下HAVING子句:

HAVING COUNT(*) > 1  AND COUNT(DISTINCT Name) = COUNT(*)