2013-04-26 3 views
1

Я не уверен, что это возможно или нет, но у меня есть таблица с именем category. Каждой категории присваивается деление. Поэтому я запрашиваю у меня db, чтобы получить группу из категорийMSSQL Group By Query - использовать результаты для выполнения следующего запроса

SELECT id_category FROM [db].[dbo].[category] 
WHERE (id_division = <<id_division_here>>) GROUP BY id_category 

Я получаю список категорий, которые я ожидал. Теперь, мне нужно, чтобы убедиться, что эти категории существуют в другой таблице называется содержанием, которое имеет поле, которое удерживает несколько значений - так LIKE оператор работает, что ... в основном

SELECT title FROM [db].[dbo].[content] 
WHERE (assigned_to LIKE '% <<id_category_here>> %') ORDER BY title 

Мой вопрос, есть ли для меня совместить два вопроса или их нужно делать отдельно? Можно ли группировать результаты из одной таблицы и использовать ее в качестве критериев поиска для запроса другой таблицы? Спасибо, что помогли мне разобраться в этом. :)

+0

Если id_category однозначно идентифицирует запись категории, вы не должны в группе id_category в первом запросе. Кроме того, можете ли вы изменить структуру таблиц? Сохранение нескольких id_categories в одном поле 'assign_to' нарушает первую нормальную форму и, если возможно, должно быть нормализовано. –

ответ

0

Try:

SELECT a.id_category, o.title 
FROM [db].[dbo].[category] a 
JOIN [db].[dbo].[content] o 
    ON o.assigned_to LIKE '%'+ a.id_category + '%' 
WHERE a.id_division = <<id_division_here>> 
0

Возможно это будет полезно для вас -

SELECT /*DISTINCT*/ c.title, t.id_category 
FROM dbo.content c 
CROSS JOIN (
    SELECT DISTINCT c.id_category 
    FROM dbo.category c 
    WHERE c.id_division = <id_division_here> 
) t 
WHERE c.assigned_to LIKE '%' + t.id_category + '%' 
ORDER BY c.title 
+0

это сработало отлично - даже если прошло годы! :) – user1255154

+0

Он был только медленнее, чем код выше ... – user1255154