Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.06.2013, 12:24   #1
Olejik
Форумчанин
 
Регистрация: 02.06.2009
Сообщений: 218
По умолчанию Выборка из нескольких таблиц

Добрый день!
Есть три таблицы:

Код:
create table "doctor"(
	id INT identity  primary key,
	name varchar(255) NOT NULL,
	firstname varchar(255) NOT NULL
)
Код:
create table "specialty"(
	id INT identity primary key,
	name varchar(255) NOT NULL,
	unique(name)
)
Код:
create table "attude_d_p"(
	id INT identity primary key,
	id_doctor INT NOT NULL,
	id_specialty INT NOT NULL,
	foreign key (id_doctor) references doctor (id) on delete no action on update cascade,
	foreign key (id_specialty) references specialty (id) on delete no action on update cascade,
	check(id_doctor = left(id,1)),
	check(id_specialty = right(id,1))
)
в таблице doctor хранятся карточки докторов (инициалы и id):
Цитата:
id name firstname
1 Максим Банецкий
2 Максим Максимов
3 Андрей Русаков
4 Екатерина Подымкина
5 Ирина Пилюгина
6 Рустам Садыков
в таблице хранятся карточки специальностей (название специальности и id), в которой стоит проверка на несовпадение имен сециальностей.
Цитата:
id name
1 Терапевт
2 Хирург
3 Кардиолог
а в таблице attude_d_p хранятся отношения (не знаю как еще это назвать) доктора к специальности. Т.е. у одного доктора может быть несколько специальностей, а у специальностей может несколько докторов. ID которого строится как ид доктора и ид специальности
Цитата:
id id_doctor id_specialty
11 1 1
13 1 3
21 2 1
32 3 2
33 3 3
42 4 2
51 5 1
53 5 3
63 6 3
Мне необходимо вывести всех докторов и их области. Вот собственно запрос:
Код:
select distinct attude_d_p.id,doctor.name,doctor.firstname,specialty.name from doctor,specialty,attude_d_p where doctor.id = attude_d_p.id_doctor
Все бы хорошо, но выводит не то, что надо:
Цитата:
id name firstname name
11 Максим Банецкий Кардиолог
11 Максим Банецкий Терапевт
11 Максим Банецкий Хирург
13 Максим Банецкий Кардиолог
13 Максим Банецкий Терапевт
13 Максим Банецкий Хирург
21 Максим Максимов Кардиолог
21 Максим Максимов Терапевт
21 Максим Максимов Хирург
32 Андрей Русаков Кардиолог
32 Андрей Русаков Терапевт
32 Андрей Русаков Хирург
33 Андрей Русаков Кардиолог
33 Андрей Русаков Терапевт
33 Андрей Русаков Хирург
42 Екатерина Подымкина Кардиолог
42 Екатерина Подымкина Терапевт
42 Екатерина Подымкина Хирург
51 Ирина Пилюгина Кардиолог
51 Ирина Пилюгина Терапевт
51 Ирина Пилюгина Хирург
53 Ирина Пилюгина Кардиолог
53 Ирина Пилюгина Терапевт
53 Ирина Пилюгина Хирург
63 Рустам Садыков Кардиолог
63 Рустам Садыков Терапевт
63 Рустам Садыков Хирург
Почему SQL выводит каждого доктора по три раза и приписывает ему все области? Что надо в запросе изменить? Заранее сасибо за ответы.
Olejik вне форума Ответить с цитированием
Старый 21.06.2013, 12:53   #2
Olejik
Форумчанин
 
Регистрация: 02.06.2009
Сообщений: 218
По умолчанию

а все, всеголишь надо было добавить еще одно условие и все
Код:
select distinct doctor.id,doctor.name,doctor.firstname,specialty.namespecialty from doctor,attude_d_p,specialty where doctor.id = attude_d_p.id_doctor and attude_d_p.id_specialty = specialty.id
и тогда получается
Цитата:
1 Максим Банецкий Кардиолог
1 Максим Банецкий Терапевт
2 Максим Максимов Терапевт
3 Андрей Русаков Кардиолог
3 Андрей Русаков Хирург
4 Екатерина Подымкина Хирург
5 Ирина Пилюгина Кардиолог
5 Ирина Пилюгина Терапевт
6 Рустам Садыков Кардиолог
Olejik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выборка из нескольких таблиц averardo SQL, базы данных 3 18.06.2013 00:13
Выборка из нескольких таблиц Ardarik SQL, базы данных 15 24.05.2013 17:01
Запрос. Выборка из нескольких таблиц Ol'ga БД в Delphi 2 16.05.2012 22:54
Выборка из нескольких таблиц в списки Di_sol Microsoft Office Access 7 13.01.2012 19:48
выборка данных из нескольких таблиц AlexxxM Microsoft Office Access 0 27.05.2010 12:08