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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.02.2010, 11:20   #1
eda
Пользователь
 
Регистрация: 14.08.2008
Сообщений: 78
По умолчанию Выборка данных с использованием in()

Здравствуйте! Помогите, пожалуйста с запросом. У меня есть две таблицы:
1) models:
id | name
--------------
1 | qqqq
2 | www
3 | aaaa
.. | ......

2) m_s
id | model_id | step
------------------------
1 | 1 | 5
2 | 1 | 10
3 | 1 | 12
4 | 1 | 4
5 | 2 | 5
6 | 2 | 4
... | ... | .....

Мне нужно выбрать из таблицы m_s модель, включающую в себя опредленные номера. например, мне нужна модель, содержащая только step = 5 и step = 4(т.е. model"_id = 2).
Код:
SELECT qa_models.id 
FROM qa_models 
WHERE 
(
    SELECT COUNT(*) 
    FROM qa_m_s 
    WHERE qa_m_s.step_id IN(4,5) 
               AND qa_m_s.model_id = qa_models.id
) = 7
Но после этого запроса в результат попадают все модели ,которые содержат step 4,5 и более. Помогите, пожалуйста, разрешить проблему. Спасибо!
eda вне форума Ответить с цитированием
Старый 02.02.2010, 11:43   #2
quit
Я есть!
Форумчанин
 
Аватар для quit
 
Регистрация: 17.02.2008
Сообщений: 318
По умолчанию

Код:
SELECT qa_models.id 
FROM qa_models 
WHERE 
(
    SELECT COUNT(*) 
    FROM qa_m_s 
    WHERE qa_m_s.step_id IN(4,5) 
               AND qa_m_s.model_id = qa_models.id
) = 7{что это?}
Думаю, если я правильно понял, то что вам нужно...
Код:
SELECT qa_models.id
FROM qa_models,qa_m_s
WHERE qa_models.id = qa_m_s.model_id
AND qa_m_s.step_id IN(4,5)
Edit:

Кстати,
Цитата:
2) m_s
id | model_id | step
------------------------
1 | 1 | 5
2 | 1 | 10
3 | 1 | 12
4 | 1 | 4
5 | 2 | 5
6 | 2 | 4
... | ... | .....
не соответствует
Цитата:
Мне нужно выбрать из таблицы m_s модель, включающую в себя опредленные номера. например, мне нужна модель, содержащая только step = 5 и step = 4(т.е. model"_id = 2).
так что вам придется добавить к приведенному мною коду такое условие:
Код:
AND qa_m_s.model_id = 2
©Учиться, учиться и еще раз учиться!

Последний раз редактировалось quit; 02.02.2010 в 11:57.
quit вне форума Ответить с цитированием
Старый 02.02.2010, 12:02   #3
eda
Пользователь
 
Регистрация: 14.08.2008
Сообщений: 78
По умолчанию

Цитата:
Сообщение от quit Посмотреть сообщение
Код:
SELECT qa_models.id 
FROM qa_models 
WHERE 
(
    SELECT COUNT(*) 
    FROM qa_m_s 
    WHERE qa_m_s.step_id IN(4,5) 
               AND qa_m_s.model_id = qa_models.id
) = 7{что это?} это опечатка, должно быть 2
Думаю, если я правильно понял, то что вам нужно...
Код:
SELECT qa_models.id
FROM qa_models,qa_m_s
WHERE qa_models.id = qa_m_s.model_id
AND qa_m_s.step_id IN(4,5)
Edit:

Кстати,

не соответствует я имела в виду только 4 и 5

так что вам придется добавить к приведенному мною коду такое условие:
Код:
AND qa_m_s.model_id = 2
условие задачи заключается как раз в том, что известны номера шагов и их количество, а найти нужно соответствущий номер модели
eda вне форума Ответить с цитированием
Старый 02.02.2010, 12:08   #4
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

может быть ТС хотел нечто такое (добавли тестовых данных)
Код:
with 
  m_s as (
  select 1 id, 1 model_id, 5 step from dual union all
  select 2, 1, 10 from dual union all
  select 3, 1, 12 from dual union all
  select 4, 1, 4 from dual union all
  --select 5, 2, 5 from dual union all
  select 6, 2, 4 from dual union all
  select 7, 2, 5 from dual union all
  select 8, 2, 5 from dual union all
  select 9, 2, 4 from dual union all
  select 10, 2, 5 from dual union all
  select 11, 2, 4 from dual union all
  select 12, 2, 5 from dual
  )

select model_id
from m_s
where 0=0
  and step in (4,5)
group by model_id
having count(1) = 7
но без подходящего "хрустального шара" вряд ли получится дать верный ответ

апдейт
с учетом данных выше каментов имеем нечто такое

Код:
with 
  m_s as (
  select 1 id, 1 model_id, 5 step from dual union all
  select 2, 1, 10 from dual union all
  select 2, 1, 1 from dual union all
  select 3, 1, 12 from dual union all
  select 4, 1, 4 from dual union all
  --select 5, 2, 5 from dual union all
  select 6, 2, 4 from dual union all
  select 7, 2, 5 from dual union all
  select 8, 2, 5 from dual union all
  select 9, 2, 4 from dual union all
  select 10, 2, 5 from dual union all
  select 11, 2, 4 from dual union all  
  select 12, 2, 5 from dual union all
  select 13, 3, 2 from dual union all
  select 14, 3, 4 from dual union all
  select 13, 4, 4 from dual union all
  select 13, 4, 5 from dual
  )

select model_id
from m_s  
group by model_id
having count(step) = 2
  and max(step) = 5
  and min(step) = 4

Последний раз редактировалось soleil@mmc; 02.02.2010 в 12:22. Причина: добавочка
soleil@mmc вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выборка из БД определённых данных Xeon332 PHP 2 19.11.2009 14:02
Выборка и подстановка данных. HIC БД в Delphi 10 10.09.2009 11:34
Выборка данных ADRENALIN86 Microsoft Office Excel 1 13.08.2009 15:51
выборка данных из Мускул Андрей79 PHP 1 02.03.2009 20:08
Выборка данных из StringGrid quqer БД в Delphi 1 14.03.2008 12:56