powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / join 1 большой или 2-х маленьких таблиц
23 сообщений из 48, страница 2 из 2
join 1 большой или 2-х маленьких таблиц
    #39349197
Cosmagnetto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проще говоря нужно создать таблицу, которая показывает спрос и предложение по каждому товару, также вывести строки где присутствует только спрос или только предложение, и товары по которым отсуствиет спрос и предложение

Да?
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349200
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saya812Это атрибут страны - то есть страна либо экспорта либо импорта.
То есть у тебя есть сущность "Страна", имеющая атрибут "экс-им-портёр"... И экземпляры сущности "Швамбрания экспортёр" и "Швамбрания импортёр" - это две независимые страны, ибо две независимые записи в таблице экземпляров сущности "Страна". Верно? Что-то мне подсказывает, что ни разу. А коли так - то кто-то неправ, и должны быть таблицы Страна, ЭкспортёрИмпортёр, и связующая СтранаЭкспортёрИмпортёр, организующая между первыми двумя связь типа много-ко-много.
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349216
saya812
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CosmagnettoА может страна и покупать и продавать один и тот же сыр?
Может.
CosmagnettoПроще говоря нужно создать таблицу, которая показывает спрос и предложение по каждому товару, также вывести строки где присутствует только спрос или только предложение, и товары по которым отсуствиет спрос и предложение

Да?
Да (неуверенно, усложнили вы как-то задачу, введя новую терминологию спроса и предложения)

AkinaТо есть у тебя есть сущность "Страна", имеющая атрибут "экс-им-портёр"... И экземпляры сущности "Швамбрания экспортёр" и "Швамбрания импортёр" - это две независимые страны, ибо две независимые записи в таблице экземпляров сущности "Страна". Верно? Что-то мне подсказывает, что ни разу. А коли так - то кто-то неправ, и должны быть таблицы Страна, ЭкспортёрИмпортёр, и связующая СтранаЭкспортёрИмпортёр, организующая между первыми двумя связь типа много-ко-много.
Мне кажется вы усложняете... До конца не понял подхода, но создание еще связи между "экспортер/импортер" и "страна" еще сильнее усложнит наш пример (еще дальше отодвинет от конечного решения).
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349224
saya812
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaТо есть у тебя есть сущность "Страна", имеющая атрибут "экс-им-портёр"... И экземпляры сущности "Швамбрания экспортёр" и "Швамбрания импортёр" - это две независимые страны, ибо две независимые записи в таблице экземпляров сущности "Страна". Верно? Что-то мне подсказывает, что ни разу. А коли так - то кто-то неправ, и должны быть таблицы Страна, ЭкспортёрИмпортёр, и связующая СтранаЭкспортёрИмпортёр, организующая между первыми двумя связь типа много-ко-много.
Страна может являться как экспортером так и импортером. Я этот атрибут предложил пихать в промежуточную таблицу (таблицу связывающую СЫР и СТРАНУ). Ну а по сути - да это атрибут страны в определенных условиях.
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349242
Cosmagnetto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Получилось
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349243
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saya812по сути - да это атрибут страны в определенных условияхНет. Это мультиатрибут. И потому много-ко-много. Более того - это мультиатрибут не страны, а пары Страна - Товар (запросто же может быть, что пармезан страна экспортирует, а чечил импортирует).
Но если ты всё же делаешь это мультиатрибутом страны, и при этом хочешь уйти от промежуточной таблицы - сделай у Страны не один, а два атрибута. Первый - экспортёр (да/нет, true/false), второй, соответственно, импортёр.
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349264
saya812
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaНет. Это мультиатрибут. И потому много-ко-много. Более того - это мультиатрибут не страны, а пары Страна - Товар (запросто же может быть, что пармезан страна экспортирует, а чечил импортирует).
Но если ты всё же делаешь это мультиатрибутом страны, и при этом хочешь уйти от промежуточной таблицы - сделай у Страны не один, а два атрибута. Первый - экспортёр (да/нет, true/false), второй, соответственно, импортёр.
Погоди, вопрос не к справочнику страны.
Akinaэто мультиатрибут не страны, а пары Страна - Товар
Это абсолютно так. Но вопрос не в этом - мне надо соединить многое ко многим сыр и страны, в этих соединениях указать - чем является страна - импортером или экспортером. А дальше (основная цель) выборка всех сыров с колонками "страны экспорта", "страны импорта". И вот тут начальный вопрос - можно сделать 2 соединительные таблицы "страны экспорта" и "страны импорта", а можно одну, но большую - "страны", а в ней атрибут "экспорт/импорт".
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349270
Cosmagnetto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot Akina]saya812сделай у Страны не один, а два атрибута. Первый - экспортёр (да/нет, true/false), второй, соответственно, импортёр.
нет смысла
Тру - импортер, Фолс - экспортер, Null - ни то ни другое
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349275
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CosmagnettoТру - импортер, Фолс - экспортер, Null - ни то ни другоеА если и то, и другое?
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349276
Cosmagnetto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
две строки подряд
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349278
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saya812А дальше (основная цель) выборка всех сыров с колонками "страны экспорта", "страны импорта". И вот тут начальный вопрос - можно сделать 2 соединительные таблицы "страны экспорта" и "страны импорта", а можно одну, но большую - "страны", а в ней атрибут "экспорт/импорт".Ну это по сути же пивот, а в реализации, вероятно, GROUP BY + GROUP_CONCAT? Ну тогда проще по тексту использовать одну копию таблицы и условие в аргументе функции, а по производительности лучше два раздельных запроса и UNION ALL.
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349280
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cosmagnettoдве строки подрядЭто ты делаешь две страны из одной. О чём говорилось выше...
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349281
Cosmagnetto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чувствуется мне нужно копать в сторону нескольких связок (SELECT + INSERT IGNORE)
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349284
Cosmagnetto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaCosmagnettoдве строки подрядЭто ты делаешь две страны из одной. О чём говорилось выше...
В промежуточной таблице - да.
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349286
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saya812 ,

Базовую таблицу (в последнем случае "СЫР") перебирать придется всю, тупо в лоб, индексы тут не помогут, если только требуемое упорядочивание не совпадет с индексом)

Связывающая (или развязывающая, вопрос терминологии) таблица может быть одна с дополнительным признаком, или их может быть несколько, для каждого признака своя. В любом случае для ускорения запроса на эту (эти) таблицу необходимо навесить индекс.

Скорость поиска по индексу для большой и огромной таблиц примерно одинаковы, поэтому разделение таблиц на несколько для каждого признака на скорость не повлияет.

Суммарное число записей в связывающих таблицах по признакам и в одной таблице с дополнительным полем тоже одинаковы.

Небольшое увеличение объема данных в одной таблице (за счет дополнительного поля "признак") вполне компенсируется организацией и поддержкой нескольких однотипных таблиц, во всяком случае отдельного обсуждения не заслуживает.

Включение в индекс общей таблицы несколько увеличит размер индексов по сравнению с индексами раздельных таблиц, но тоже не вижу в этом большой разницы.

Очевидное преимущество одной таблицы - масштабируемость. Так, выпустили новую модель шкафа с тремя полками - и не придется переписывать ничего (ну, кроме разве что контроля номера полки при вводе данных).

Выводы делать не буду ;-)
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349288
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CosmagnettoВ промежуточной таблице - да.Ммм... что-то я теряю нить обсуждения... мне казалось, что копья ломаются именно из-за нежелания делать связующую таблицу.
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349304
saya812
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cygapb-007,
Вроде все понятно, в рамках вопроса "что быстрее / лучше" ответ получил. А по сути запроса так делаю - на join-ах или как-то иначе лучше?

AkinaМмм... что-то я теряю нить обсуждения... мне казалось, что копья ломаются именно из-за нежелания делать связующую таблицу.
Нет, связывающую все равно придется) Я другого способа не вижу...
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349312
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saya812по сути запроса так делаю - на join-ах или как-то иначе лучше?
А как еще-то? SQL работает на JOINах, даже если это выглядит как декартово произведение, или как вложенный запрос
Все равно требуется поиск в таблицах и объединение результатов
Код: sql
1.
2.
3.
4.
5.
6.
select s.id, s.prop, e.name `from`, i.name `to`
from `СЫР` s
left join `СЫР_СТРАНА` se on se.id_СЫР=s.id and se.экспорт_импорт=0
left join `СТРАНА` e on e.id=se.id_СТРАНЫ
left join `СЫР_СТРАНА` si on si.id_СЫР=s.id and si.экспорт_импорт=1
left join `СТРАНА` i on i.id=si.id_СТРАНЫ
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349316
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну, или для раздельных таблиц
Код: sql
1.
2.
3.
4.
5.
6.
select s.id, s.prop, e.name `from`, i.name `to`
from `СЫР` s
left join `СЫР_СТРАНА_ЭКСПОРТ` se on se.id_СЫР=s.id 
left join `СТРАНА` e on e.id=se.id_СТРАНЫ
left join `СЫР_СТРАНА_ИМПОРТ` si on si.id_СЫР=s.id
left join `СТРАНА` i on i.id=si.id_СТРАНЫ
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349339
saya812
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cygapb-007,
Так и делал...

Спасибо всем за участие!

Если есть еще идеи (варианты) пишите.
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349351
Cosmagnetto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cygapb-007saya812по сути запроса так делаю - на join-ах или как-то иначе лучше?
А как еще-то? SQL работает на JOINах, даже если это выглядит как декартово произведение, или как вложенный запрос
Все равно требуется поиск в таблицах и объединение результатов
Код: sql
1.
2.
3.
4.
5.
6.
select s.id, s.prop, e.name `from`, i.name `to`
from `СЫР` s
left join `СЫР_СТРАНА` se on se.id_СЫР=s.id and se.экспорт_импорт=0
left join `СТРАНА` e on e.id=se.id_СТРАНЫ
left join `СЫР_СТРАНА` si on si.id_СЫР=s.id and si.экспорт_импорт=1
left join `СТРАНА` i on i.id=si.id_СТРАНЫ


Так это работает так, как нужно ТС?
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349360
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cosmagnetto ,

ТС хотел не конкретное решение, а оптимальное решение для класса задач
...
Рейтинг: 0 / 0
join 1 большой или 2-х маленьких таблиц
    #39349424
saya812
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CosmagnettoТак это работает так, как нужно ТС?
Да, это работает. Но просто сейчас я переписываю код (этот писался года 3-4 назад) и задумался о его верности, в плане оптимизации - например подумал о возможности разделения на 2 разные таблицы - типа меньше строк быстрее работа... Но подумал мало-ли например 1 таблица кэшируется и второе ее подключение нечего не стоит. Или может вообще не туда копать стоит, как-то переписать иначе, без безумного кол-ва join-ов...
Но пока, как я понимаю, такое решение самое оптимальное...
...
Рейтинг: 0 / 0
23 сообщений из 48, страница 2 из 2
Форумы / MySQL [игнор отключен] [закрыт для гостей] / join 1 большой или 2-х маленьких таблиц
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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