Модераторы: skyboy, SamDark
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нужен LEFT JOIN без данных 
V
    Опции темы
maxipub
Дата 15.3.2019, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 514
Регистрация: 22.10.2009

Репутация: 1
Всего: 1



Добрый день!

Код
SELECT c.cat_id, t.cat_text, t.cat_gender 
FROM cat AS c 
LEFT JOIN cat_text AS t ON t.cat_id=c.cat_id 
WHERE c.cat_id=123;


t.cat_gender ENUM('unisex', 'man', 'woman');
(t.cat_id, t.cat_gender) UNIQUE

Запрос возвращает 1 строку если cat_text не джойнится по условию, и до 3 строк - когда есть что джойнить.

Мне надо сделать так, чтоб запрос всегда возвращал 3 строки и cat_gender был указан:
123 text_OR_NULL 'unisex'
123 text_OR_NULL 'man'
123 text_OR_NULL 'woman'

В общем, чтоб запрос вел себя так, будто к нему INNER JOIN-интся таблица с одним единственным полем cat_gender и тремя записями в нем: 'unisex', 'man', 'woman'. Но без этой таблицы (зачем нам лишние таблицы, если есть вариант без них).

Так можно?
PM MAIL   Вверх
ksnk
Дата 15.3.2019, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6798
Регистрация: 13.4.2007
Где: СПб

Репутация: 2
Всего: 383



Без временной таблицы - не знаю как сделать
https://www.db-fiddle.com/f/xteXTe18SVzgJjQz7u47wo/1


Это сообщение отредактировал(а) ksnk - 15.3.2019, 16:18


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
maxipub
Дата 15.3.2019, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 514
Регистрация: 22.10.2009

Репутация: 1
Всего: 1



Жаль... Так понимаю, Вы имели ввиду так:
https://www.db-fiddle.com/f/xteXTe18SVzgJjQz7u47wo/2
(INNER вместо LEFT и tmp.cat_gender вместо t.cat_gender)

Помню делал что-то вида SELECT t.field, 123 AS val... - когда надо было подставить конкретные данные в выборку. Думал, может и с таблицами как-то так можно.
PM MAIL   Вверх
ksnk
Дата 15.3.2019, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6798
Регистрация: 13.4.2007
Где: СПб

Репутация: 2
Всего: 383



Ну да. Хотя можно и без временной таблицы. SQL велик и в некоторых местах - могуч.... Правда накой такое чудо нужно? smile 
https://www.db-fiddle.com/f/xteXTe18SVzgJjQz7u47wo/5

Это сообщение отредактировал(а) ksnk - 15.3.2019, 23:12


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Akina
Дата 18.3.2019, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20393
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 449



Цитата(maxipub @  15.3.2019,  15:31 Найти цитируемый пост)
Но без этой таблицы (зачем нам лишние таблицы, если есть вариант без них).

Бред. Сервер не может вернуть данные, которых у него НЕТ.

Если это - реальная задача, то в cat_text присутствуют все варианты его значения, и вместо формирования опорной таблицы на основе знания, какие есть варианты для ENUM, надо использовать 
Код

SELECT DISTINCT cat_gender FROM cat_text

Цитата(ksnk @  16.3.2019,  00:10 Найти цитируемый пост)
Правда накой такое чудо нужно?

Формирование опорной таблицы на основании известного набора значений или на основании имеющихся границ - совершенно обычное дело. В рамках MySQL старых (5+) версий да, это приходилось делать извратным образом (вплоть до использования переменных), а в 8+ уже есть честные CTE.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
ksnk
Дата 18.3.2019, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6798
Регистрация: 13.4.2007
Где: СПб

Репутация: 2
Всего: 383



Цитата(Akina @  18.3.2019,  08:38 Найти цитируемый пост)
Если это - реальная задача, то в cat_text присутствуют все варианты его значения, и вместо формирования опорной таблицы на основе знания, какие есть варианты для ENUM, надо использовать 

SELECT DISTINCT ...

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

Ну а самое главное возражение против "давайте все сделаем одним запросом" - это то, что этап выковыривания данных из базы накладывается на  этап оформления формы ввода данных. по идее - это 2 разных действия и не нужно их смешивать в одном запросе... Хотя это чистая лирика, если неизвестно накой все это делается....


Цитата(Akina @  18.3.2019,  08:38 Найти цитируемый пост)
 а в 8+ уже есть честные CTE.

Вообще-то СТЕ не поможет избавится от 3-х селектов с юнитами, а просто вынесет их в более очевидное место smile 


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
maxipub
Дата 18.3.2019, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 514
Регистрация: 22.10.2009

Репутация: 1
Всего: 1



Цитата(ksnk @  15.3.2019,  23:10 Найти цитируемый пост)
https://www.db-fiddle.com/f/xteXTe18SVzgJjQz7u47wo/5

Мне подходит. На таком варианте и остановился. Спасибо!

Есть 2 пола и унисекс. В ближайшем будущем вряд ли появится что-то еще. smile 

Цитата(Akina @  18.3.2019,  08:38 Найти цитируемый пост)
SELECT DISTINCT cat_gender FROM cat_text

Хороший вариант в копилочку. Но не в моем случае, т.к. таблица может быть пустой.

Это сообщение отредактировал(а) maxipub - 18.3.2019, 14:24
PM MAIL   Вверх
Akina
Дата 18.3.2019, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20393
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 449



Цитата(maxipub @  18.3.2019,  15:24 Найти цитируемый пост)
Есть 2 пола и унисекс. В ближайшем будущем вряд ли появится что-то еще.

А как же none-sex?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
maxipub
Дата 19.3.2019, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 514
Регистрация: 22.10.2009

Репутация: 1
Всего: 1



Цитата(Akina @  18.3.2019,  14:59 Найти цитируемый пост)
А как же none-sex?

Не знаю что это такое. Типа пол не указан? Интернет-магазин одежды. Выбирается 1 из 3 вариантов.
PM MAIL   Вверх
Akina
Дата 19.3.2019, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20393
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 449



Цитата(maxipub @  19.3.2019,  12:39 Найти цитируемый пост)
Не знаю что это такое. Типа пол не указан?

Ну по смыслу - это то, что не подходит ни мужчинам, ни женщинам...  smile  скажем, ботинки фирмы "Скороход", ежели кто помнит...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
maxipub
Дата 15.4.2019, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 514
Регистрация: 22.10.2009

Репутация: 1
Всего: 1



Akina, это идет как unisex.
PM MAIL   Вверх
Google
  Дата 26.5.2019, 20:03 (ссылка)  





  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.1090 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.