MySQL选择if字段是唯一还是null

时间:2013-02-20 18:15:47

标签: group-by unique distinct no-duplicates ignore-duplicates

抱歉,我无法在任何地方找到一个例子,主要是因为我想不出任何其他方式来解释它不包括DISTINCT或UNIQUE(我发现它在SQL中是误导性的术语)。

我需要从一个表中选择唯一值和空值。

FLAVOURS:
id  |  name  |  flavour
--------------------------
1   |  mark  |  chocolate
2   |  cindy |  chocolate
3   |  rick  |  
4   |  dave  |  
5   |  jenn  |  vanilla
6   |  sammy |  strawberry
7   |  cindy |  chocolate
8   |  rick  |  
9   |  dave  |  
10  |  jenn  |  caramel
11  |  sammy |  strawberry

我想要那些有独特风味的孩子(香草,焦糖)和没有任何味道的孩子。

我不希望有重复口味的孩子(巧克力,草莓)。

我对帮助的搜索总是会回答如何为巧克力和草莓分组BY BY,UNIQUE和DISTINCT。那不是我想要的。我不希望在一个领域有任何重复的术语 - 我想要其他一切。

适当的MySQL select语句是什么?

谢谢!

3 个答案:

答案 0 :(得分:1)

您可以使用HAVING仅选择某些组,因此要选择只有一种风格的组,您可以使用:

SELECT * from my_table GROUP BY flavour HAVING COUNT(*) = 1

如果您想要选择那些具有NULL条目的用户,请使用

SELECT * FROM my_table WHERE flavour IS NULL

如果将它们组合在一起,则会获得具有唯一风格的所有条目,或者为NULL。

SELECT * from my_table GROUP BY flavour HAVING COUNT(*) = 1 AND flavour IS NOT NULL
UNION
SELECT * FROM my_table WHERE flavour IS NULL

我添加了“flavor IS NOT NULL”,只是为了确保如果它是单一的,那么就不会选择NULL的味道,这会产生重复。

答案 1 :(得分:0)

我没有可供使用的数据库,但您应该可以使用查询。

  

来自FLAVORS的SELECT名称WHERE味道IN(SELECT味道,计数(Flavor)来自FLAVORS,其中count(Flavor)= 1 GROUP BY味道)或味道IS NULL;

如果这不太正确,我道歉,但希望这是一个好的开始。

答案 2 :(得分:0)

您需要一个查找重复项的自联接,然后您需要通过查找没有匹配的情况(即WHERE t2.flavor IS NULL)来否决这些重复项。然后你做了一些完全不同的事情,在原始表中查找空值,WHERE子句中的第二行(OR t1.flavor IS NULL)

SELECT DISTINCT t1.name, t1.flavor 
FROM tablename t1
LEFT JOIN tablename t2
ON t2.flavor = t1.flavor AND t2.ID <> t1.ID
WHERE t2.flavor IS NULL
OR t1.flavor IS NULL

我希望这会有所帮助。