powered by simpleCommunicator - 2.0.48     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Создать таблицу всех комбинаций из двух справочников
12 сообщений из 12, страница 1 из 1
Создать таблицу всех комбинаций из двух справочников
    #40092439
GrigoriyFomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть 2 справочника. Нужно создать третью таблицу - все записи из одной таблицы со всеми записями из второй. У каждой такой записи будет дополнительное поле - показывать или нет.

Например, первый справочник - брэнды, второй справочник - города. Нужна третья таблица связи бренд-город - показывать его или нет.
То есть в первом справочнике 3 записи, во втором - 12, нужно создать третью таблицу из 3*12=36 записей со всеми вариантами комбинаций. Ессно, первый столбец - форейн кей на первый справочник, второй - форейн кей на 2 справочник, 3 поле - показывать его или нет (есть в этом городе такой бренд или нет.

Пробовал JOIN-ами это решить - не хватает знаний для этого. даже чтоб сформировать вопрос гуглю - это матрицы?
спасибо за готовое решение сразу с инсертом в 3-ю таблицу.
...
Рейтинг: 0 / 0
Создать таблицу всех комбинаций из двух справочников
    #40092440
GrigoriyFomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все, допетрил, CROSS JOIN спасет отца русской демократии
...
Рейтинг: 0 / 0
Создать таблицу всех комбинаций из двух справочников
    #40092443
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrigoriyFomin,

SELECT FROM БРЕНДЫ, ГОРОДА
...
Рейтинг: 0 / 0
Создать таблицу всех комбинаций из двух справочников
    #40092510
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrigoriyFomin,

Обычное декартово произведение даст тебе все комбинации. YouRock уже ответил.
...
Рейтинг: 0 / 0
Создать таблицу всех комбинаций из двух справочников
    #40092543
Wlr-l
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так ТС сам "допетрил", что отца русской демократии спасет CROSS JOIN,
так как здесь четко и однозначно говорится о декартовом произведении.

Конструкция "SELECT FROM БРЕНДЫ, ГОРОДА" в этом случае явно неудачная,
так глядя на нее не понятно, здесь действительно идет речь о декартовом
произведении или просто забыли о WHERE.
...
Рейтинг: 0 / 0
Создать таблицу всех комбинаций из двух справочников
    #40092551
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wlr-l
глядя на нее не понятно, здесь действительно идет речь о декартовом
произведении или
Вообще-то это по стандарту так. Если это не понятно - ну...
...
Рейтинг: 0 / 0
Создать таблицу всех комбинаций из двух справочников
    #40092552
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wlr-l
Конструкция "SELECT FROM БРЕНДЫ, ГОРОДА" в этом случае явно неудачная
она не "неудачная" - она устаревшая
Wlr-l
так глядя на нее не понятно, здесь действительно идет речь о декартовом
произведении или просто забыли о WHERE

при CROSS JOIN можно так же "напихать" условий в WHERE и превратить его в INNER JOIN
...
Рейтинг: 0 / 0
Создать таблицу всех комбинаций из двух справочников
    #40092553
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
Вообще-то это по стандарту так.
по устаревшему стандарту
https://blog.mclaughlinsoftware.com/oracle-sql-programming/basic-sql-join-semantics/SQL JOIN Concepts:

A table is an array of arrays, which means a row in any table contains an array. The definition of a table defines the data structure of a row or array.
Selection is the process of identifying, accessing, and joining data into return data sets. The basic elements of selection in a SQL statement are the FROM and WHERE clauses.
The ANSI 89 syntax uses a cross join or comma-delimited list of tables, and places the join in the WHERE clause.
The ANSI 92 syntax uses a set of key words like INNER JOIN, LEFT JOIN, et cetera, and puts the join in an ON or USING clause, which are often referred to as subclauses.
...
Рейтинг: 0 / 0
Создать таблицу всех комбинаций из двух справочников
    #40092555
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
court
YuRock
Вообще-то это по стандарту так.
по устаревшему стандарту
https://blog.mclaughlinsoftware.com/oracle-sql-programming/basic-sql-join-semantics/SQL JOIN Concepts:

A table is an array of arrays, which means a row in any table contains an array. The definition of a table defines the data structure of a row or array.
Selection is the process of identifying, accessing, and joining data into return data sets. The basic elements of selection in a SQL statement are the FROM and WHERE clauses.
The ANSI 89 syntax uses a cross join or comma-delimited list of tables, and places the join in the WHERE clause.
The ANSI 92 syntax uses a set of key words like INNER JOIN, LEFT JOIN, et cetera, and puts the join in an ON or USING clause, which are often referred to as subclauses.
По работающему в настоящее время стандарту.
...
Рейтинг: 0 / 0
Создать таблицу всех комбинаций из двух справочников
    #40092641
Wlr-l
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
court,

Конструкция "SELECT FROM таблица1, таблица2" неудачная или устаревшая? Не в этом суть.

Первая мысль при виде такой конструкции: "где же WHERE?".
Вспомним, не говоря об этом вслух, сколько раз в своей жизни мы выполнили DELETE без WHERE?
Если кто-то сказал, что ни разу, то у него все еще впереди.
Последствия такой ошибки проявятся практически сразу.
При SELECT последствия могут быть обнаружены не сразу, т.е. ошибка может быть длительное время оставаться незамеченной.

Поэтому в таком коде без комментариев не обойтись.


" при CROSS JOIN можно так же "напихать" условий в WHERE и превратить его в INNER JOIN "

К счастью, в CROSS JOIN запретили предложение ON, к несчастью, о WHERE скорее всего забыли.

Да, можно напихать, но если встречается конструкция CROSS JOIN ... WHERE, то это говорит о том, что
1) стандарт нуждается в пересмотре в части правил соединения таблиц и
2) программист еще не освоил соединение таблиц.
...
Рейтинг: 0 / 0
Создать таблицу всех комбинаций из двух справочников
    #40092642
Wlr-l
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YuRock,

В стандарте ANSI 92 появились конструкции соединения таблиц, которые существенно повысили наглядность текста запросов и значительно уменьшили вероятность появления ошибок соединения таблиц. С тех пор прошло почти три десятилетия.

Не нужно держаться за то, что потенциально может привести к ошибке.
...
Рейтинг: 0 / 0
Создать таблицу всех комбинаций из двух справочников
    #40092643
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а нас на форуме новая гура?
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Создать таблицу всех комбинаций из двух справочников
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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