Отказ от ответственности: У меня нет базы данных, чтобы проверить на, это только предложения, чтобы вы начали.
Эти примеры предполагают, что у вас есть какое-то ограничение для предотвращения дублирования строк.
Если вы просто хотите, тем, которые происходят один раз в списке (то есть, принадлежат только к одной категории), вы можете использовать имея:
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
ли вам просто хотите «все из категории A» и «все из категории B, которые еще не находятся в категории A», - или у вас будет более двух категорий для проверки в какой-то момент? –
Не понимаю. – kennytm
@Kenny: Иногда мне жаль, что это было так * http://xkcd.com/481/ для SO. Опять же, я не уверен, что это изменит ситуацию. (* @ lolalola: Не обижайтесь, это не касается ваших языковых навыков. Речь идет о том, что вы не нашли времени, чтобы прочитать свой собственный вопрос, прежде чем опубликовать его. *) – Tomalak