假设我有下表:
MyTable
id INTEGER PRIMARY KEY
column_a TEXT
column_b TEXT
现在我想返回column_a不唯一的所有行,但column_b是唯一的。所以如果我在表格中有以下数据:
id column_a column_b
1 A x
2 B x
3 A y
4 A x
5 B x
6 C z
我希望SQL语句返回:
id column_a column_b
1 A x
3 A y
因为column_a在两行中都相同但column_b不同。 column_a =“B”的行在column_b中具有相同的值,因此不应返回它们。而column_a =“C”的行具有唯一的column_a,因此也不应返回。我该怎么做?
我已经通过以下SQL来了一半:
SELECT *
FROM MyTable
JOIN
(
SELECT column_a, column_b
FROM MyTable
GROUP BY column_a
HAVING COUNT(*) >= 2
) TmpTable
ON MyTable.column_a = TmpTable2.column_a
WHERE MyTable.column_b != TmpTable.column_b
但是省略了我想要返回的最后一行,所以在上面的示例中它只会返回
id column_a column_b
1 A x
答案 0 :(得分:0)
SELECT MIN(id),
column_a,
column_b
FROM MyTable
WHERE column_a IN (SELECT column_a
FROM MyTable
GROUP BY column_a
HAVING COUNT(DISTINCT column_b) >= 2)
GROUP BY column_a,
column_b