Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.07.2014, 22:09   #11
Pamparam
Форумчанин
 
Регистрация: 08.11.2009
Сообщений: 225
По умолчанию

Цитата:
Сообщение от Vapaamies Посмотреть сообщение
Вспомнил, что у меня локально стоит MySQL и чуток поэкспериментировал. Получилось так:
Код:
select korobka_id from (
  select
    korobka_id,
    case when frukt_id = 3 then 1 end apple,
    case when frukt_id = 4 then 1 end orange,
    case when frukt_id = 5 then 1 end mandarin
  from
    frukti_v_korobkah
  where
    frukt_id in (3, 4, 5)
) tt
group by
  korobka_id
having
  count(apple) > 0 and
  count(orange) > 0 and
  count(mandarin) > 0;
Этот запрос подразумевает наличие индекса frukti_v_korobkah(frukt_id), а необходимость в frukti_v_korobkah(korobka_id) нужно смотреть по плану.

Проверял inline-таблицей с четырьмя коробками:
Код:
select korobka_id from (
  select
    korobka_id,
    case when frukt_id = 3 then 1 end apple,
    case when frukt_id = 4 then 1 end orange,
    case when frukt_id = 5 then 1 end mandarin
  from (
    select 1 korobka_id, 3 frukt_id
    union all
    select 1, 4
    union all
    select 1, 5
    union all
    select 2, 1
    union all
    select 2, 3
    union all
    select 3, 1
    union all
    select 3, 2
    union all
    select 3, 4
    union all
    select 3, 5
    union all
    select 4, 1
    union all
    select 4, 2
    union all
    select 4, 3
    union all
    select 4, 4
    union all
    select 4, 5
  ) frukti_v_korobkah
  where
    frukt_id in (3, 4, 5)
) tt
group by
  korobka_id
having
  count(apple) > 0 and
  count(orange) > 0 and
  count(mandarin) > 0;
только я не вижу ни какого упрощения по сравнению с моим постом, т.к. ты забыл таблицу korobki, где содержится кол-во вещей и при ее вставке будет запрос, идентичный моему
Pamparam вне форума Ответить с цитированием
Старый 18.07.2014, 11:47   #12
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,768
По умолчанию

Цитата:
Сообщение от Pamparam Посмотреть сообщение
ты забыл таблицу korobki, где содержится кол-во вещей и при ее вставке будет запрос, идентичный моему
Тогда я не понял постановку задачи, или она неполна. Каким образом задается, какие именно фрукты искать? Я исходил из того, что это известно вызывающей стороне, которая и формирует нужный запрос.
Vapaamies вне форума Ответить с цитированием
Старый 18.07.2014, 13:34   #13
Pamparam
Форумчанин
 
Регистрация: 08.11.2009
Сообщений: 225
По умолчанию

Цитата:
Сообщение от Vapaamies Посмотреть сообщение
Тогда я не понял постановку задачи, или она неполна. Каким образом задается, какие именно фрукты искать? Я исходил из того, что это известно вызывающей стороне, которая и формирует нужный запрос.
хз что может быть не понятно из задания... Есть таблица в коробками, фруктами и фруктами в коробках
Разумеется вызывающей стороне известно, что нужно нужно вывести коробки, где есть ТОЛЬКО заданные фрукты, а в твоем примере это не учитывается, т.е. ты просто ищешь в каких коробках есть такие фрукты. В любом случае, ты привел пример полностью аналогичный моему, если добавить сравнение с количеством в коробке
Pamparam вне форума Ответить с цитированием
Старый 22.07.2014, 16:31   #14
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,768
По умолчанию

Цитата:
Сообщение от Pamparam Посмотреть сообщение
нужно вывести коробки, где есть ТОЛЬКО заданные фрукты
Да, это я упустил.

Цитата:
Сообщение от Pamparam Посмотреть сообщение
В любом случае, ты привел пример полностью аналогичный моему, если добавить сравнение с количеством в коробке
Согласен. Я тяжело воспринимаю SQL-код, записанный не столбиком, а в длинную строку. Сейчас мне кажется, что тут нельзя найти другое решение, поскольку minus или intersect подразумевают построение виртуальных полных наборов данных с последующим вычитанием, что будет явно не быстрей, чем отсечение при прямой выборке.

Откуда получился вывод, что для каждой коробки делается по три подзапроса? Что показывает план? Есть ли индекс frukti_v_korobkah(frukt_id)?
Vapaamies вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
масив с неопределенным количеством строк kalpak44 Общие вопросы C/C++ 5 27.12.2012 16:21
Как просуммировать столбец с неизвестным количеством строк? vpm Microsoft Office Excel 2 06.11.2012 10:30
Сводная таблица с большим количеством строк s8259 Microsoft Office Excel 1 03.04.2011 00:28
Создание новой формы с нужным количеством строк. konistra Microsoft Office Excel 13 01.06.2010 23:28
простая сортировка с заранее неизвестным количеством строк ShamanK Microsoft Office Excel 4 05.05.2010 16:50