来自表的独特价值

时间:2010-08-01 11:38:43

标签: mysql

表:

cat_name / topic
    cat1 topic1
    cat3 topic1
    cat6 topic2
    cat4 topic3
    cat3 topic3
    cat3 topic4

SELECT * from all_cat
WHERE cat_name = "cat4" OR ...

结果应为:

cat4 topic3
cat3 topic4 

如何选择(在MySQL中)所有主题'表单类别4,甚至那些只属于类别3的例子(例如:作为topic4,tipoc3不是因为他也属于类别4)。

我找到了4组中的所有主题,但主题是一个单元,有3组见面不知道

1 个答案:

答案 0 :(得分:1)

免责声明:我没有可以测试的数据库,这些只是让您入门的建议。

这些示例假设您有某种约束来防止重复行。

如果您只想要列表中出现一次的主题(即仅属于一个类别),您可以使用:

select topic, count(*) from all_cats group by topic having count(*) = 1

如果您想要所有主题,但只希望它们返回一次:<​​/ p>

select distinct topic from all_cats

如果您特别需要来自cat4和cat3的所有主题,其中cat4中不存在该主题:

select topic from all_cats where cat_name = 'cat4'
union all
select topic from all_cats where cat_name = 'cat3' and topic not in
  (select topic from all_cats where cat_name = 'cat4')

如果您想要一个仅属于cat4或仅属于cat3(独家或)的主题列表,您可以使用我之前发布的having语句的变体:

select topic, count(*) from all_cats where cat_name in ('cat3', 'cat4') group by topic having count(*) = 1