在MySql中为不同列选择整个记录

时间:2014-11-12 17:55:35

标签: mysql

我有一张桌子:

[myTable]
ID
Name
HairColor
NumberOfPairsOfPants

我可以轻松地获取HairColor列表

SELECT DISTINCT HairColor FROM myTable

但我想要完整的内容是头发颜色不同的记录(是的,数据库表是非规范化/冗余的,所以我没有得到逻辑错误)

伪代码

SELECT DISTINCT HairColor,* FROM myTable

语法帮助!

1 个答案:

答案 0 :(得分:1)

好的,首先,SELECT DISTINCT haircolor FROM myTable并没有给你"发色是不同的。"它为您提供所有独特的头发颜色。有点像"房间里名字不同。"如果有两个人名为Sally,SELECT DISTINCT name会为Sally提供一行。你要找的东西有点不同。

你要做的是,首先,确定哪些头发颜色是不同的,即哪一种只发生一次。为此你需要

SELECT haircolor, COUNT(*) AS cnt FROM myTable GROUP BY haircolor HAVING cnt > 1;

完成上述操作后,您需要将这些结果与原始表格相关联,以获得与这些发色相关联的整行,例如

SELECT a.* FROM myTable AS a
INNER JOIN 
 (SELECT SELECT haircolor, COUNT(*) AS cnt FROM myTable GROUP BY haircolor HAVING cnt > 1) AS b
ON a.haircolor = b.haircolor