Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 13.01.2015
Сообщений: 8
1

Запрос из таблиц со связью "многие-ко-многим" с несколькими связями с промежуточной таблицей

13.01.2015, 21:54. Показов 3198. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Я разрабатываю БД для организации по продаже запчастей. Новые (ещё не выполненные) заказы хранят информацию о требуемой запчасти, выполненные заказы хранят информацию о требуемой и проданной запчастях (клиент заказал одну запчасть, а ему продали другую (аналогичную)).
Таблицы "Заказы" и "Запчасти" связаны связью "многие-ко-многим" с помощью таблицы "Заказы-запчасти". Таблица "Заказы-запчасти" связана с таблицей "Запчасти" 2 раза - для проданных и требуемых запчастей.
Проблема состоит в том, что я не знаю, как вывести записи с требуемыми и проданными запчастями
(типа "Номер заказа" | "Дата заказа" | "Тип требуемой запчасти" | "Код требуемой запчасти" | "Тип проданной запчасти" | "Код проданной запчасти").
Собственно, прошу помочь мне в этом. Либо посоветуйте, как сделать более эффективную структуру БД (если таковое возможно в данном варианте).
Миниатюры
Запрос из таблиц со связью "многие-ко-многим" с несколькими связями с промежуточной таблицей  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.01.2015, 21:54
Ответы с готовыми решениями:

Заполнение таблиц с связью многие-ко-многим
Есть две таблицы Artists и Performers. Между ними установлена связь многие ко многим и...

Выбрать из таблиц со связью многие ко многим
Здравствуйте! Помогите составить запрос. Суть такая: имеются две таблицы, между ними связь многие...

Отображение таблиц со связью многие ко многим
Есть две таблицы, между которыми установлена связь многие ко многим, через третью таблицу:...

Сохрание промежуточной таблицы связи многие-ко-многим
Всем привет. Проблема следующая Есть две таблицы 1: statia - "родительская", 2: prepodStatia -...

Запрос Многие-ко-Многим ( связь большого количества таблиц)
К таблице Application нужно как то прикрепить некоторое оборудование, нужно получить название или...

7
Эксперт MS Access
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
Эксперт MS Access
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
Эксперт MS Access
26806 / 14485 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
14.01.2015, 13:39 6
Поможет создание подзапросов, в которых каждая копия Запчасти связывается с [Тип_запчасти]. Типа такого
SQL
1
2
3
4
5
6
7
8
SELECT Заказы_Запчасти.*, 
  q1.[Код_запчасти] AS [ТребуемыйКод], q1.Название AS [ТребуемыйТип],
  q2.[Код_запчасти] AS [ПроданныйКод], q2.Название AS [ПроданныйТип]
FROM Заказы_Запчасти,
(SELECT z.*, tz.Название FROM Запчасти z INNER JOIN Тип_запчасти tz ON z.id_Тип_запчасти=tz.id) q1,
(SELECT z.*, tz.Название FROM Запчасти z INNER JOIN Тип_запчасти tz ON z.id_Тип_запчасти=tz.id) q2,
Заказы_Запчасти LEFT JOIN q1 ON Заказы_Запчасти.id_Требуемая_запчасть=q1.id,
Заказы_Запчасти LEFT JOIN q2 ON Заказы_Запчасти.id_Требуемая_запчасть=q2.id
Имена исправьте на подлинные. Если бы выложили фрагмент БД, то можно было бы рекомендовать текст работающего запроса.

В подзапросах z, tz, а также q1 и q2 алиасы (синонимы) таблиц/запросов. Приведены для краткости записи и различения подзапросов

Добавлено через 10 минут
В связи второго подзапроса описАлся. Надо
SQL
1
Заказы_Запчасти LEFT JOIN q2 ON Заказы_Запчасти.id_Проданная_запчасть=q2.id
2
Эксперт MS Access
17486 / 7248 / 1651
Регистрация: 21.06.2012
Сообщений: 13,863
14.01.2015, 13:42 7
Лучший ответ Сообщение было отмечено stchest как решение

Решение

Цитата Сообщение от stchest Посмотреть сообщение
как связать таблицу "Запчасти_1" с таблицей "Типы запчастей"?
Добавить в запрос таблицу "Типы запчастей" второй раз, получится "Типы запчастей_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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.01.2015, 16:19
Помогаю со студенческими работами здесь

Правильная организация БД со связями многие ко многим
Здравствуйте, у меня следующий вопрос мне необходимо спроектировать БД в которой есть таблицы со...

База данных со связями многие ко многим
Есть 3 таблицы в бд: Author (поля: name_id, name), Book(поля: book_id, book), Author_Book (name_id,...

Модель со связью многие-ко-многим
Уже голова кругом :wall: (Учусь на MVC 5) Есть класс User и Command со связью многие ко многим. ...

Сохранение данных со связью многие-ко-многим
Здравствуйте, делаю сохранение данных, связь многие-ко-многим, то есть, например, у меня есть...

Создание таблицы со связью многие-ко-многим
Здравствуйте, помогите разобраться. Возможно ли подключиться таблице(Timetable) к таблице(Group),...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru