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