Получить список родительских и дочерних записей с несколькими записями с критериями - SQL 2005 - PullRequest
1 голос
/ 11 августа 2009

У меня есть родительские / дочерние таблицы:

родительская таблица:

id | описание

1 | Александра 2 | Наталья

дочерний стол:

id | id_parent | описание

1 | 1 | Программист 2 | 1 | Хирургия 3 | 2 | Программист 4 | 2 | IT

Как вернуть набор записей в соответствии с фильтрами, например, если мы хотим получить все записи с помощью «Программиста», которые мы хотели бы установить:

Таблица ответов:

id_parent | id_child | описание (от ребенка)

1     |    1     |  Programmer
2     |    3     |  Programmer

НО, если фильтр выглядит так: «Программист» И «Хирургия», запрос ДОЛЖЕН возвращать только:

таблица ответов:

id_parent | id_child | описание (от ребенка)

1     |    1     |  Programmer
1     |    2     |  Surgery

Как видите, мне также нужно какое-то "соединение", чтобы "связать" описание и код в дочерней таблице.

Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 11 августа 2009
SELECT t.id_parent,
       t.id,
       t.description
  FROM CHILD t
  JOIN CHILD p ON p.id_parent = t.id_parent AND p.description = 'Programmer'
  JOIN CHILD s ON s.id_parent = t.id_parent AND s.description = 'Surgery'

Исходя из вашего SQL, вам нужно использовать:

  SELECT p.ID, 
         c.ID, 
         c.ID_SpecMatrix 
    FROM Parent p
    JOIN Child c ON p.ID = c.ID_Parent AND c.ID_SpecMatrix = 4
    JOIN Child c2 ON p.ID = c2.ID_Parent AND c2.ID_SpecMatrix = 5
GROUP BY p.ID, 
         c.ID, 
         c.ID_SpecMatrix 

Ключ присоединяется к дополнительным копиям таблицы CHILD. ID_parent to ID связывает записи вместе; AND фильтрует эту копию таблицы CHILD, чтобы она содержала только те строки, где ID_SpecMatrix соответствует вашим критериям.

В запросе необходимо использовать динамический SQL, чтобы его можно было масштабировать до любого количества критериев, которые вы хотите использовать.

0 голосов
/ 12 августа 2009

Как насчет этого

SELECT * FROM Child
WHERE id_specmatrix IN (4,5) AND
      Parent_ID IN (SELECT DISTINCT parent.id FROM parent p
                    JOIN Child s1 ON s1.id_parent = p.id AND s1.id_specmatrix = 4
                    JOIN Child s2 ON s2.id_parent = p.id AND s2.id_specmatrix = 5)
0 голосов
/ 11 августа 2009

выберите * из родительского р осталось присоединиться к ребенку с на p.id = c.id_parent где c.description = 'Программист' или c.description = 'Surgen'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...