2010-08-01 5 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», - или у вас будет более двух категорий для проверки в какой-то момент? –

+6

Не понимаю. – kennytm

+0

@Kenny: Иногда мне жаль, что это было так * http://xkcd.com/481/ для SO. Опять же, я не уверен, что это изменит ситуацию. (* @ lolalola: Не обижайтесь, это не касается ваших языковых навыков. Речь идет о том, что вы не нашли времени, чтобы прочитать свой собственный вопрос, прежде чем опубликовать его. *) – Tomalak

ответ

1

Отказ от ответственности: У меня нет базы данных, чтобы проверить на, это только предложения, чтобы вы начали.

Эти примеры предполагают, что у вас есть какое-то ограничение для предотвращения дублирования строк.

Если вы просто хотите, тем, которые происходят один раз в списке (то есть, принадлежат только к одной категории), вы можете использовать имея:

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

Если вы хотите, чтобы все темы, но только хочу, чтобы они вернулись однажды:

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 (исключающее ИЛИ) можно использовать вариант, имеющий заявление я отправил раньше:

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

Смежные вопросы