Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Помогите с SQL запросом / 10 сообщений из 10, страница 1 из 1
27.01.2004, 19:07
    #32389704
Antonius
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с SQL запросом
Все очень банально:

1 таблица Clients:
ClientID :autoInc, PrinaryKey
ClientName :string

2 Таблица Params:
ClientID :Long-int
ClientParam :string

В первой таблице имена клиентов, во второй - их характеристики.
Первая таблица связана со второй по полю ClientID, один-ко-многим.
т.е. каждому клиенту из первой таблице соответствует любое количество записей из второй таблицы. В принципе - первая таблица и не нужна - достаточно второй.

И вот я хочу отобрать всех клиентов у кого (например) ClientParam in ('Толстый','Богатый','Женатый')? т.е. должны присутствовать ОДНОВРЕМЕННО все эти три параметра.
SELECT ClientID FROM params WHERE ClientParam in ('Толстый','Богатый','Женатый');
не катит по понятным причинам.
Подскажите? Я вроде решение нашел, но оно совсем через ж, прям показывать стыдно :) а на первый взгляд должно все быть элементарно. Но как? Под вечер в голову ничего не лезет.
...
Рейтинг: 0 / 0
27.01.2004, 19:15
    #32389713
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с SQL запросом
Разрешаются ли в таблице Params повторения? Возможна ли ситуация, когда у одного клиента два раза написано Толстый?
...
Рейтинг: 0 / 0
27.01.2004, 19:22
    #32389723
Antonius
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с SQL запросом
Вопрос понятен. Нет. пара "клиент-параметр" уникальна. В принципе она и может быть первичным ключем.
...
Рейтинг: 0 / 0
27.01.2004, 19:38
    #32389741
(c)VIG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с SQL запросом
Код: plaintext
1.
2.
3.
4.
select ClientId 
from Params
WHERE ClientParam in ('Толстый','Богатый','Женатый')
Group By ClientId 
having count(*)= 3 
...
Рейтинг: 0 / 0
27.01.2004, 19:44
    #32389747
Antonius
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с SQL запросом
Да, видать мне стыдиться нечего. :) Я так-же делаю...
Почему то казалось есть более простое решение. Group и Having здесь как то... неожиданно, что ли....
...
Рейтинг: 0 / 0
27.01.2004, 19:50
    #32389754
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с SQL запросом
Здравствуй, VIG! Мы с тобой хорошо сыграли в 4 руки (особенно 2 твоих).
...
Рейтинг: 0 / 0
27.01.2004, 20:10
    #32389774
(c)VIG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с SQL запросом
Привет,Саныч! Как дела? Я то вообще-то думал ,что ты сразу ссылки выдашь
на топики с аналогичными запросами :)
2 Antonius
а на первый взгляд должно все быть элементарно
Ну, можно еще через три Left/Inner JOINа, тоже "элементарно"
...
Рейтинг: 0 / 0
27.01.2004, 20:16
    #32389786
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с SQL запросом
VIGЯ то вообще-то думал ,что ты сразу ссылки выдашь
А я не сообразил, как их найти. :^)
...
Рейтинг: 0 / 0
27.01.2004, 20:39
    #32389819
Antonius
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с SQL запросом
Хорошо... А допустим есть еще одна таблица, так сказать, паралельно Params.
Назовем ее Params2. И в ней другие характеристики, например марки автомобилей, принадлежащих клиентам (все это не более чем пример ).
Понимаю, выглядит не логично и все такое, но на самом деле Params2 образуется из кучи других таблиц и запросов. Типа - косвенные характеристики. Но для простоты будем считать что она сама по себе, как и таблица Params.

3 Таблица Params2:
ClientID :Long-int
ClientCar :string

связана с первой так же, по полю ClientID. У одного клиента может быть несколько автомобилей.

нужно отобрать
ClientParam in ('Толстый','Богатый','Женатый') and ClientCar in ('Mercedes','ВАЗ')

насколько я понимаю, надо (проще) делать 2 запроса и выдавать пересечение их результатов, правильно мыслю?
...
Рейтинг: 0 / 0
27.01.2004, 20:43
    #32389825
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с SQL запросом
select ClientId
from Params inner join Params2 on Params.ClientId = Params2.ClientId
WHERE ClientParam in ('Толстый','Богатый','Женатый') and ClientCar in ('Mercedes','ВАЗ')
Group By ClientId
having count(*)=6

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


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