选择列A不唯一且列B是唯一的行?

时间:2014-02-26 12:10:37

标签: join sqlite

假设我有下表:

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

1 个答案:

答案 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