Вход | Регистрация
 

Как получить только те записи, которые присутствуют во всех наборах?

Как получить только те записи, которые присутствуют во всех наборах?
Я
   RomaH
 
30.09.20 - 14:53
Есть РС с измерениями:
Картинка + цвет

в него пишутся картинка и цвет который на ней присутсвует


пользователь вводит в строку "массив" слов - например "чер зел кра бел"

я к этим словам подбираю "похожие" цвета (Черный, черничный, зеленый, красный, белый)

надо найти картинки на которых есть все перечисленные цвета внутри одного запроса

например для тройки цветов получили таблицу:

Таблица1

Ч - К1*
Ч - К2
Ч - К3
Б - К1*
Б - К4
З - К1*
З - К2

нужна только К1


первое внутреннее соединение сама с собой по К = К

Таблица2

Ч - К1*
Ч - К2
Б - К1*
З - К1*
З - К2

отсюда имеем таблицу картинок
К1*
К2

потом полное соединение с таблицей цветов

Таблица4
Ч - К1*
Ч - К2
З - К1*
З - К2
Б - К1*
Б - К2

а уже эту таблицу соединяем с таблицей2 по цвету и картинке

Ч - К1* - К1*
Ч - К2  - К2
З - К1* - К1*
З - К2  - К2
Б - К1* - К1*
Б - К2  - NULL

по условию ЕСТЬ NULL - находим исключаемые из таблицы картинок картинки

у меня пока так
   fisher
 
1 - 30.09.20 - 14:56
Один запрос. В отборе ИЛИ по цветам, в СГРУППИРОВАТЬ - Картинка, в ИМЕЮЩИЕ - условие на количество цветов.
   RomaH
 
2 - 30.09.20 - 15:06
(1) а как в одном запросе количество цветов засунуть в условие? - цвета я тоже запросом получаю
Где Цвет.Наименование ПОДОБНО %ааа%
   RomaH
 
3 - 30.09.20 - 15:07
по сути можно МВТ 
узнать количество в выборке
и подставить в текст ...
   RomaH
 
4 - 30.09.20 - 15:08
"В отборе ИЛИ по цветам" - это генерация текста запроса по количеству цветов которые получаются другим запросом
   _Batoo
 
5 - 30.09.20 - 15:18
Условие: Цвет В (ВЫБРАТЬ ВТ_ИскомыеЦвета.Цвет Из ВТ_ИскомыеЦвета)
   fisher
 
6 - 30.09.20 - 15:30
(2) А в чем проблема?
ИМЕЮЩИЕ КОЛИЧЕСТВО(Цвет) В (ВЫБРАТЬ КОЛИЧЕСТВО(Цвет) ИЗ....)
   fisher
 
7 - 30.09.20 - 15:32
(4) Зачем генерация? Тоже заменяется банальным "В"

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.