2010-08-01 97 views
1

表:独特价值表

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)所有topic'us形式类别4,即使是那些只属于到类别3(例如:作为topic4,tipoc3不是因为他也属于类别4)。

我找到了4组中的所有话题,但话题是3组为单位见面不知道

+1

你只需希望“A类所有”和“所有类别B中尚未属于A类的所有类别” - 或者您是否有两类以上的类别需要检查? – 2010-08-01 11:42:08

+6

我无法理解。 – kennytm 2010-08-01 11:42:22

+0

@Kenny:有时候,我希望这里有* this * http://xkcd.com/481/。然后再次,我不确定这是否会有所作为。 (* @ lolalola:没有冒犯,这与你的语言技能无关,这是因为你在发布之前没有花时间阅读你自己的问题。*) – Tomalak 2010-08-01 11:51:32

回答

1

免责声明:我没有数据库来测试,这些都只是建议,让你开始。

这些示例假定您有某种约束来防止重复的行。如果你希望所有的主题

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

,但:

如果你只是想在列表中出现一次(也就是只属于一个类别)的主题,你可以使用具有只希望他们回来一次:

select distinct topic from all_cats

如果你特别希望所有的从3,4,5 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(异或)可以使用具有声明我张贴的一个变体的主题列表前面:

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