MySQL独特的两列组合

时间:2014-03-16 16:40:43

标签: mysql

考虑下表:

 A | B | ...
-------------
 1 | 1 | ...
 1 | 1 | ...
 1 | 9 | ...
 3 | 1 | ...
 3 | 2 | ...

我希望只有在尚未看到A和B的组合时才将每一行视为不同。因此除了前两个行之外,这些行中的每一行都是不同的。然后我想抓住每个不同条目的整行。

我知道我可以重组表格以获得我用A和B创建的id,这会使这更容易,但我想尽可能避免这种情况。我对MySQL查询不是很了解,所以我不知道从哪里开始这样的事情。

这样的查询可能吗?如果是这样,请解释该查询是什么以及它是如何工作的。否则解释为什么不可能,并告诉我最佳解决方案是什么。

编辑:

我意识到我的措辞不清楚。我说我想抓住每个不同的条目,但这是不正确的。我的意思是我想要每个不同的条目,然后我也只想要一个非独特的条目。我仍然想要前两行中的一行,而且不管我得到哪一行都不重要。

1 个答案:

答案 0 :(得分:2)

您可以使用扩展分组在MySQL中执行此操作:

select t.*
from table t
group by a, b
having count(*) = 1;

having子句计算匹配的行数,仅包含唯一的行。

顺便说一句,这是一个很好的例子,其中扩展的MySQL组是有用的。

编辑:

您也可以在不使用扩展程序的情况下表达这一点,并且table(A, B)上的索引可能更有效:

select t.*
from table t
where 1 = (select count(*) from table t2 where t2.a = t.a and t2.b = t.b);

编辑:

您仍然可以使用group by扩展程序:

select t.*
from table t
group by a, b;

请注意,文档保证select中的所有列都来自同一行。在实践中,它们确实来自同一行但是任意行。

如果没有唯一标识符,则无法使用exists方法执行此操作。你可以用变量来做,但上面应该没问题。