Страница 1 из 1
Создание запроса 1->m
Добавлено: 11 авг 2007, 15:10
SSA
Как создать запрос. Есть таблица первого уровня. От нее есть таблицы второго уровня. Связь один ко многим. В одной таблице второго уровня есть одна запись, в другой таблице второго уровня 2 записи. Нужно получить запрос след-го вида:
Данные табл. 1 ур Данные табл 1 2-го ур Данные табл 2 2-го ур.
Данные табл. 1 ур ДОЛЖНО БЫТЬ ПУСТО Данные табл 2 2-го ур.
Добавлено: 11 авг 2007, 20:54
kdv
Добавлено: 11 авг 2007, 23:21
SSA
Я наверное не совсем точно описал задачу. Про объединения я знаю.
Задача состоит в следующем. Есть пациент ИВАНОВ В.В. в таблице ПАЦИЕНТ (первый уровень). Есть еще две таблицы ДЕФОРМАЦИЯ НА ЛЕВОЙ СТОПЕ и ДЕФОРМАЦИЯ НА ПРАВОЙ СТОПЕ (второй уровень). Эти таблицы связаны с таблицей ПАЦИЕНТ (один пациент и много видов деформаций на правой стопе или на левой), т.е. эти две таблицы реализуют "множественный выбор". Допустим у ИВАНОВА В.В есть 3 деформации на правой стопе (3 записи в таблице ДЕФОРМАЦИЯ НА ПРАВОЙ СТОПЕ) и 3 деформации на левой стопе (3 записи в таблице ДЕФОРМАЦИЯ НА ЛЕВОЙ СТОПЕ). Нужно построить запрос, который отберет просто всех пациентов, а также выведет деформации левой и правой стопы (неважно есть они или нет). Я строил запрос типа
SELECT
ПАЦИЕНТ.*,
ДЕФОРМАЦИЯ НА ПРАВОЙ СТОПЕ.ВИД,
ДЕФОРМАЦИЯ НА ЛЕВОЙ СТОПЕ.ВИД
FROM
ПАЦИЕНТ
LEFT JOIN ДЕФОРМАЦИЯ НА ПРАВОЙ СТОПЕ и т.д.
LEFT JOIN ДЕФОРМАЦИЯ НА ЛЕВОЙ СТОПЕ и т.д.
В результате получаю выборку:
ИВАНОВ ДЛ1 ДП1
ИВАНОВ ДЛ2 ДП1
ИВАНОВ ДЛ3 ДП1
ИВАНОВ ДЛ1 ДП2
ИВАНОВ ДЛ2 ДП2
ИВАНОВ ДЛ3 ДП2
ИВАНОВ ДЛ1 ДП3
ИВАНОВ ДЛ2 ДП3
ИВАНОВ ДЛ3 ДП3
а нужно в виде
ИВАНОВ ДЛ1 ДП1
ИВАНОВ ДЛ2 ДП2
ИВАНОВ ДЛ3 ДП3 или
ИВАНОВ ДЛ1 ДП2
ИВАНОВ ДЛ2 ДП3
ИВАНОВ ДЛ3 ДП1 или
(это уже не важно, главное чтобы было три записи из 9)
Можно ли сделать такое одним запросом???????
Добавлено: 12 авг 2007, 00:01
Attid
если я правельно понял то только через процедуру.
или кросс отчет на клиенте
Добавлено: 12 авг 2007, 11:29
Slavik
Attid писал(а):если я правельно понял то только через процедуру.
или кросс отчет на клиенте
Ну почему же. Если список видов деформаций единый для левой и правой стопы (1,2,3,...), то можно ещё группировкой по пациенту и виду деформации или (если FB2) соединением пациентов и видов деформаций стопы с подзапросом, который возвращает наличие конкретного вида деформации левой и правой стопы.
P.S. Только недавно я приводил на этом форуме примеры подобных запросов.
Добавлено: 13 авг 2007, 10:17
WildSery
SSA писал(а):Я наверное не совсем точно описал задачу.
Описал задачу ясно. И kdv тебя правильно направил.
Надо ещё только чуточку сильнее мозг наморщить.
Деформации у тебя никакого порядка не имеют? Как именно ты узнал, что это "ДЛ1", а не "ДЛ2"?
В связке, где второй лефт, добавляешь условие соединение дополнительное, по этому номеру.
Если ты порядок не предусмотрел, то сгодится уникальный ID, но тут запрос будет посложнее.
ЗЫ: Кстати, а почему в разделе "Ремонт БД"?
Добавлено: 13 авг 2007, 10:24
stix-s
SSA писал(а):
а также выведет деформации левой и правой стопы (неважно есть они или нет).
Неважно? Врач сказал в морг, значит в морг?

ЗЫ
Да, кстати, на каждое заболевание своя таблица создается?