powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Один ко многим. Определить многих
8 сообщений из 8, страница 1 из 1
Один ко многим. Определить многих
    #39981533
Dmi_tri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется таблица СКЛАД(ид, наименование), в которой представлен список предметов, имеющихся на складе.
Также имеются различные изделия, в которых использованы предметы со склада. Для каждого изделия своя таблица: ИЗДЕЛИЕ(ид_предмета)
Стоит задача - для каждого предмета из таблицы склад определить, в каком изделии он применяется.
Подскажите, как SQL запрос реализовать?
...
Рейтинг: 0 / 0
Один ко многим. Определить многих
    #39981539
Dmi_tri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В голову приходит такой вариант решения: в каждую из таблиц ИЗДЕЛИЕ добавить дополнительный столбец <признак>, куда заносить наименование изделия
Итого, получаем запрос:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT Склад.ид, Склад.наименование, ИЗДЕЛИЕ1.признак
FROM Склад INNER JOIN ИЗДЕЛИЕ1
ON Склад.ид=ИЗДЕЛИЕ1.ид_предмета
UNION
SELECT Склад.ид, Склад.наименование, ИЗДЕЛИЕ2.признак
FROM Склад INNER JOIN ИЗДЕЛИЕ2
ON Склад.ид=ИЗДЕЛИЕ2.ид_предмета
UNION
SELECT Склад.ид, Склад.наименование, ИЗДЕЛИЕ3.признак
FROM Склад INNER JOIN ИЗДЕЛИЕ3
ON Склад.ид=ИЗДЕЛИЕ3.ид_предмета
UNION
...
...
Рейтинг: 0 / 0
Один ко многим. Определить многих
    #39981541
Dmi_tri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость


Как теперь можно сгруппировать данные по name, чтобы все имеющиеся признаки выводились в одной строке?
Таблица должна иметь вид:
1 | Ключ | склад1, склад2, склад5
...
Рейтинг: 0 / 0
Один ко многим. Определить многих
    #39981542
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ерунда. Это связь M:N, для её организации нужна третья таблица.
...
Рейтинг: 0 / 0
Один ко многим. Определить многих
    #39981544
Dmi_tri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, один ко многим там. Один предмет из таблицы СКЛАД может быть включен во много таблиц ИЗДЕЛИЕ (изделие1, изделие2, изделие3 и тд)
С запросом уже разобрался, вряд ли можно какой-то более производительный написать. Сейчас интересует как можно сконкатенировать признаки относящиеся к одной позиции инвентаря
...
Рейтинг: 0 / 0
Один ко многим. Определить многих
    #39981548
Dmi_tri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dmi_tri
Сейчас интересует как можно сконкатенировать признаки относящиеся к одной позиции инвентаря


Погуглил, в MySQL есть функция GROUP_CONCAT. Мне она не подойдет, поэтому изменю условие задачи: нужно найти список позиций со склада, который применяется только в изделиях из перечня (изделие1, изделие2...)
...
Рейтинг: 0 / 0
Один ко многим. Определить многих
    #39981569
Dmi_tri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость


Остановился вот на таком решении. Знаю, что оно выдает лишние записи, но их уже вручную придется чистить

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT * FROM `Таб` WHERE id IN(
SELECT id
FROM `Таб`
WHERE признак IN ('склад1', 'склад2')
AND id IN
(SELECT ID FROM
(SELECT id, count(признак) FROM `Таб$`
GROUP BY id
HAVING count(признак)=2)
)
)
...
Рейтинг: 0 / 0
Один ко многим. Определить многих
    #39981595
Фотография Жук в муравейнике
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmi_tri
один ко многим там.
отнюдь, один склад содержит разные изделия и те же изделия содержатся в других складах
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Один ко многим. Определить многих
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]