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

Join 选择列A不唯一且列B唯一的行?,join,sqlite,Join,Sqlite,假设我有下表: MyTable id INTEGER PRIMARY KEY column_a TEXT column_b TEXT 现在我想返回列a不唯一但列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语句返回

假设我有下表:

MyTable
 id INTEGER PRIMARY KEY
 column_a TEXT
 column_b TEXT
现在我想返回列a不唯一但列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
因为两行中的列_a相同,但列_b不同。列为_a=“B”的行在列中的值相同,因此不应返回这些行。并且列为_a=“C”的行具有唯一的列,因此也不应返回该列。我该怎么做

我已经通过以下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

很好用,但我不清楚你为什么建议使用MIN(id)?如果我只使用id,甚至是*,它似乎也能正常工作?一个组(由
列A
列b
的唯一组合定义)可能有多个记录。选择哪个记录返回
id
值是随机的,除非使用某种聚合函数。
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