【发布时间】:2015-04-29 11:08:09
【问题描述】:
我有 3 个 mysql 表(动物、类别和动物_2_类别)。 每个动物都可以有 0-n 个类别(例如鱼、宠物、昆虫、食肉动物、“会飞”等)。
表格“动物”(id、名称)
1, dog
2, cat
3, bee
...
表格“类别”(id、名称)
1, pet
2, insect
3, mammal
4, fish
5, can fly
...
表“animal_2_category”(animal_id、category_id)
1, 1
1, 3
2, 1
2, 3
3, 2
3, 5
...
我现在需要的是所有类别组合的列表。 以下查询有效:
SELECT CONCAT_WS("-", x.name, c.name)
FROM animal_2_category a2c1
JOIN animal_2_category a2c2 ON a2c1.animal_id = a2c2.animal_id
JOIN category c ON c.id = a2c2.category_id´
JOIN categories x
GROUP BY a2c2.category_id
此查询将返回以下内容:
- 宠物哺乳动物
- 哺乳动物-宠物
- 昆虫会飞
问题在于,我得到了重复的条目“pet-mammal”和“mammal-pet”。 如何修改查询,只获取其中一个,例如:
- 宠物哺乳动物
- 昆虫会飞
【问题讨论】:
-
无需连接这些数据。事实上,粗略的估计,在 SQL 中没有问题需要 CONCAT 或 GROUP_CONCAT 作为答案的一部分。
-
只需添加一个要求,一个结果的id必须低于另一个结果的id。