powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Декартово произведение CROSS JOIN
7 сообщений из 7, страница 1 из 1
Декартово произведение CROSS JOIN
    #38743700
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!
Необходимо объединить три таблицы, показав все возможные сочетания (при этом в первой таблице пока нет данных, для простоты).
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE TABLE `treaty_norm` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `techprocess_id` int(11) unsigned NOT NULL,
  `operation_type_id` int(11) unsigned NOT NULL)

CREATE TABLE `techprocess` (
  `id int(11) unsigned NOT NULL AUTO_INCREMENT,
  `techprocess_name` varchar(60) NOT NULL)  /*one, two*/

CREATE TABLE `operation_type` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `operation_type_name` varchar(60) NOT NULL)     /*loading, unloading*/



Запрос:
Код: sql
1.
2.
3.
4.
SELECT tn.id, operation_type_name, techprocess_name
FROM techprocess tp
CROSS JOIN operation_type ot
LEFT JOIN treaty_norm tn ON ((`tn`.`techprocess_id` = tp.id) and (tn.`operation_type_id` = ot.id))


выдает следующее:
Код: sql
1.
2.
3.
4.
null        loading      one
null        unloading   one
null        loading      two
null        unloading   two



Затем мы ликвидировали таблицу operation_type, потому что в ней все равно находилось всегда только 2 строки: loading и unloading, и перенесли данные значения в ENUM поле таблицы treaty_norm:

Код: sql
1.
2.
3.
4.
CREATE TABLE `treaty_norm` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `techprocess_id` int(11) unsigned NOT NULL,
  `operation_type` enum('loading','unloading') DEFAULT NULL)



Вопрос: каким запросом получить тот же самый результат - собрание всех возможных сочетаний, с учетом того, что теперь отдельной таблицы со значениями ('loading', 'unloading') нет, а есть только такое ENUM поле?
...
Рейтинг: 0 / 0
Декартово произведение CROSS JOIN
    #38743702
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вернее, уточню: задача стояла: получить декартово произведение таблиц techprocess и operation_type, и затем каждой строке сопоставить одно значение таблицы treaty_norm (нулевое или ненулевое). Теперь таблица operation_type исчезла, а результат должен остаться таким же.
...
Рейтинг: 0 / 0
Декартово произведение CROSS JOIN
    #38743867
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvladТеперь таблица operation_type исчезла, а результат должен остаться таким же.
Код: sql
1.
(SELECT 'loading' `operation_type_name` UNION ALL SELECT 'unloading') `operation_type`
...
Рейтинг: 0 / 0
Декартово произведение CROSS JOIN
    #38744009
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftsvnvladТеперь таблица operation_type исчезла, а результат должен остаться таким же.
Код: sql
1.
(SELECT 'loading' `operation_type_name` UNION ALL SELECT 'unloading') `operation_type`


Спасибо, сработало!
...
Рейтинг: 0 / 0
Декартово произведение CROSS JOIN
    #38744093
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvladЗатем мы ликвидировали таблицу operation_type, потому что в ней все равно находилось всегда только 2 строки: loading и unloading, и перенесли данные значения в ENUM поле таблицы treaty_norm:

Код: sql
1.
2.
3.
4.
CREATE TABLE `treaty_norm` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `techprocess_id` int(11) unsigned NOT NULL,
  `operation_type` enum('loading','unloading') DEFAULT NULL)



Вопрос: каким запросом получить тот же самый результат - собрание всех возможных сочетаний, с учетом того, что теперь отдельной таблицы со значениями ('loading', 'unloading') нет, а есть только такое ENUM поле?


Да никаким.

Создай ещё одну таблицу , с двумя строками, и полями со значениями 'loading', 'unloading', и CROSS JOIN с ней делай.
...
Рейтинг: 0 / 0
Декартово произведение CROSS JOIN
    #38745970
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivДа никаким.
Создай ещё одну таблицу , с двумя строками, и полями со значениями 'loading', 'unloading', и CROSS JOIN с ней делай.
miksoft привел вариант выше, который работает.
...
Рейтинг: 0 / 0
Декартово произведение CROSS JOIN
    #38746047
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvlad,

я просто не дочитал до конца, что ему нужно было.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Декартово произведение CROSS JOIN
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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