0 / 0 / 0
Регистрация: 13.01.2015
Сообщений: 8
|
|
1 | |
Запрос из таблиц со связью "многие-ко-многим" с несколькими связями с промежуточной таблицей13.01.2015, 21:54. Показов 3198. Ответов 7
Метки нет (Все метки)
Я разрабатываю БД для организации по продаже запчастей. Новые (ещё не выполненные) заказы хранят информацию о требуемой запчасти, выполненные заказы хранят информацию о требуемой и проданной запчастях (клиент заказал одну запчасть, а ему продали другую (аналогичную)).
Таблицы "Заказы" и "Запчасти" связаны связью "многие-ко-многим" с помощью таблицы "Заказы-запчасти". Таблица "Заказы-запчасти" связана с таблицей "Запчасти" 2 раза - для проданных и требуемых запчастей. Проблема состоит в том, что я не знаю, как вывести записи с требуемыми и проданными запчастями (типа "Номер заказа" | "Дата заказа" | "Тип требуемой запчасти" | "Код требуемой запчасти" | "Тип проданной запчасти" | "Код проданной запчасти"). Собственно, прошу помочь мне в этом. Либо посоветуйте, как сделать более эффективную структуру БД (если таковое возможно в данном варианте).
0
|
13.01.2015, 21:54 | |
Ответы с готовыми решениями:
7
Заполнение таблиц с связью многие-ко-многим Выбрать из таблиц со связью многие ко многим Отображение таблиц со связью многие ко многим Сохрание промежуточной таблицы связи многие-ко-многим Запрос Многие-ко-Многим ( связь большого количества таблиц) |
17486 / 7248 / 1651
Регистрация: 21.06.2012
Сообщений: 13,863
|
|
13.01.2015, 22:18 | 2 |
Немного по другому:
- удалите одну из связей Запчасти - Заказы_Запчасти. - добавьте таблицу Запчасти в схему еще раз, получится Запчасти_1 - свяжите ее с полем без связи в Заказы_Запчасти. В той схеме, которую Вы привели, требуемая и проданная запчасти должны совпадать, а в измененной - уже нет. И все запросы нужно строить также.
1
|
0 / 0 / 0
Регистрация: 13.01.2015
Сообщений: 8
|
|
14.01.2015, 09:34 [ТС] | 3 |
Благодарю. Получается.
Однако есть еще вопрос: а как вывести все заказы? Т.е. и без проданной запчастью, и с проданной. Сейчас получается вывести только те, у которых не пусты оба поля с id запчастей в таблице "Заказы-запчасти"
0
|
17486 / 7248 / 1651
Регистрация: 21.06.2012
Сообщений: 13,863
|
|
14.01.2015, 09:44 | 4 |
Сообщение было отмечено stchest как решение
Решение
Свяжите Заказы_Запчасти с Запчастями по LEFT JOIN, а не INNER JOIN. Или в конструкторе в параметрах объединения (открывается окно в контекстном меню при нажатии правой клавиши на линии) выберите "Объединение ВСЕХ записей из Заказы_Запчасти ..." - линия получит направление от Заказы_Запчасти к Запчастям.
1
|
0 / 0 / 0
Регистрация: 13.01.2015
Сообщений: 8
|
|
14.01.2015, 13:01 [ТС] | 5 |
Ага. А как связать таблицу "Запчасти_1" с таблицей "Типы запчастей"? Сейчас в результате запроса коды запчастей выдаются разные коды запчастей (у требуемых и проданных (что и нужно)), а типы запчастей - одинаковые, в том числе тип выдается в случае, когда нет проданной запчасти.
0
|
26806 / 14485 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
|
|||||||||||
14.01.2015, 13:39 | 6 | ||||||||||
Поможет создание подзапросов, в которых каждая копия Запчасти связывается с [Тип_запчасти]. Типа такого
В подзапросах z, tz, а также q1 и q2 алиасы (синонимы) таблиц/запросов. Приведены для краткости записи и различения подзапросов Добавлено через 10 минут В связи второго подзапроса описАлся. Надо
2
|
17486 / 7248 / 1651
Регистрация: 21.06.2012
Сообщений: 13,863
|
|
14.01.2015, 13:42 | 7 |
Сообщение было отмечено stchest как решение
Решение
Добавить в запрос таблицу "Типы запчастей" второй раз, получится "Типы запчастей_1" и связать с ней. Только там тоже LEFT JOIN понадобятся.
1
|
0 / 0 / 0
Регистрация: 13.01.2015
Сообщений: 8
|
|
14.01.2015, 16:19 [ТС] | 8 |
ltv_1953, ещё раз спасибо. Работает.
0
|
14.01.2015, 16:19 | |
14.01.2015, 16:19 | |
Помогаю со студенческими работами здесь
8
Правильная организация БД со связями многие ко многим База данных со связями многие ко многим Модель со связью многие-ко-многим Сохранение данных со связью многие-ко-многим Создание таблицы со связью многие-ко-многим Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |