我有一个像这样的表结构:
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
有人可以帮助形成查询吗?
答案 0 :(得分:3)
一种方法是:
SELECT ProductId, ParentId, Name
FROM mytable
WHERE ParentId IN (
SELECT Parentid
FROM mytable
GROUP BY Parentid
HAVING MIN(Name) <> MAX(Name))
您也可以使用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
最后请注意,如果您希望Name
列中的所有值不同,则必须使用以下HAVING
子句:
HAVING COUNT(*) > 1 AND COUNT(DISTINCT Name) = COUNT(*)