Я использую SQL Server 2014 для своего проекта. У меня есть три таблицы:
Table A:
Column: id
Table B:
Column: id, id_of_Table_A
Table C:
Column: id, id_of_Table_B, category
The relationship between A and B is one to many
The relationship between B and C is one to many
В таблице C есть 10 значений категорий для столбца category
, но меня интересуют только три категории (cat1, cat2, cat3). Я надеюсь запросить и получить следующие результаты для трех категорий:
id_of_Table_A, category, category, category
У меня есть следующее утверждение:
select a.id, c.category from Table_C c
join Table_B b on b.id = c.id_of_Table_B
join Table_A a on a.id = b.id_of_Table_A
where c.category = 'cat1' and a.id in (1, 2, 3)
Но это утверждение только перечисляет
id_of_Table_A, cat1
, который содержит только cat1 данного id_of_Table_A. Я надеюсь иметь что-то вроде:
1, cat1, cat2, cat3
если cat1, cat2 и cat3 существуют в таблице C для данного идентификатора 1
в таблице A.
Если один оператор не может дать желаемых результатов, то с хранимой процедурой все в порядке.
Обновление
В следующем примере результатов,
1, cat1, cat2, cat3
cat1, cat2, cat3 должны быть из трех разных записей в таблице B. Предположим, у нас есть эти таблицы и строки:
Table A: 1,2
Table B: (1,1), (2,1), (3,1), (4,2), (5,2), (6,2)
Table c: (1,1,'cat3'), (2,2,'cat1'), (3,3,'cat2'), (4,4,'cat1'), (5,5,'cat4'), (6,6,'cat2')
Тогда ожидаемые результаты должны быть:
1, cat1, cat2, cat3
В основном отношения таблиц образуют дерево. Я надеюсь найти корень (Таблица A) с листьями cat1, cat2 и cat3 на непересекающихся путях от корня.