抱歉,我无法在任何地方找到一个例子,主要是因为我想不出任何其他方式来解释它不包括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语句是什么?
谢谢!
答案 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
我希望这会有所帮助。