Найти первичный ключ из одной таблицы в списке через запятую
Передо мной была поставлена задача создать отчет, основанный на очень плохо спроектированной структуре таблиц.
Рассмотрим следующие две таблицы. Они содержат техники, которые каждый человек любит выполнять в каждом спортзале. Имейте в виду, что уникальный человек может отображаться в нескольких строках таблицы PERSONNEL:
PERSONNEL
+-----+-----+-------+--------+-----------+
| ID | PID | Name | Gym | Technique |
+-----+-----+-------+--------+-----------+
| 1 | 122 | Bob | GymA | 2,3,4 |
+-----+-----+-------+--------+-----------+
| 2 | 131 | Mary | GymA | 1,2,4 |
+-----+-----+-------+--------+-----------+
| 3 | 122 | Bob | GymB | 1,2,3 |
+-----+-----+-------+--------+-----------+
TECHNIQUES
+-----+------------+
| ID | Technique |
+-----+------------+
| 1 | Running |
+-----+------------+
| 2 | Walking |
+-----+------------+
| 3 | Hopping |
+-----+------------+
| 4 | Skipping |
+-----+------------+
У меня возникли проблемы с запросом MSSQL, который надежно предоставит мне список всех людей в таблице, выполняющих определенную технику.
Например, скажем, я хочу список всех, кто любит пропускать. Желаемые результаты будут:
PREFERS_SKIPPING
+-----+-------+--------+
| PID | Name | Gym |
+-----+-------+--------+
| 122 | Bob | GymA |
+-----+-------+--------+
| 131 | Mary | GymA |
+-----+-------+--------+
Точно так же:
PREFERS_HOPPING
+-----+-------+--------+
| PID | Name | Gym |
+-----+-------+--------+
| 122 | Bob | GymA |
+-----+-------+--------+
| 122 | Bob | GymB |
+-----+-------+--------+
Я могу легко разбить строки в ColdFusion, но это не вариант из-за размера таблицы PERSONNEL. Кто-нибудь может помочь?