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

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
Помогите с SQL запросом
    #32389713
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Разрешаются ли в таблице Params повторения? Возможна ли ситуация, когда у одного клиента два раза написано Толстый?
...
Рейтинг: 0 / 0
Помогите с SQL запросом
    #32389723
Antonius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос понятен. Нет. пара "клиент-параметр" уникальна. В принципе она и может быть первичным ключем.
...
Рейтинг: 0 / 0
Помогите с SQL запросом
    #32389741
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
select ClientId 
from Params
WHERE ClientParam in ('Толстый','Богатый','Женатый')
Group By ClientId 
having count(*)= 3 
...
Рейтинг: 0 / 0
Помогите с SQL запросом
    #32389747
Antonius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, видать мне стыдиться нечего. :) Я так-же делаю...
Почему то казалось есть более простое решение. Group и Having здесь как то... неожиданно, что ли....
...
Рейтинг: 0 / 0
Помогите с SQL запросом
    #32389754
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Здравствуй, VIG! Мы с тобой хорошо сыграли в 4 руки (особенно 2 твоих).
...
Рейтинг: 0 / 0
Помогите с SQL запросом
    #32389774
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет,Саныч! Как дела? Я то вообще-то думал ,что ты сразу ссылки выдашь
на топики с аналогичными запросами :)
2 Antonius
а на первый взгляд должно все быть элементарно
Ну, можно еще через три Left/Inner JOINа, тоже "элементарно"
...
Рейтинг: 0 / 0
Помогите с SQL запросом
    #32389786
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
VIGЯ то вообще-то думал ,что ты сразу ссылки выдашь
А я не сообразил, как их найти. :^)
...
Рейтинг: 0 / 0
Помогите с SQL запросом
    #32389819
Antonius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хорошо... А допустим есть еще одна таблица, так сказать, паралельно Params.
Назовем ее Params2. И в ней другие характеристики, например марки автомобилей, принадлежащих клиентам (все это не более чем пример ).
Понимаю, выглядит не логично и все такое, но на самом деле Params2 образуется из кучи других таблиц и запросов. Типа - косвенные характеристики. Но для простоты будем считать что она сама по себе, как и таблица Params.

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

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

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

насколько я понимаю, надо (проще) делать 2 запроса и выдавать пересечение их результатов, правильно мыслю?
...
Рейтинг: 0 / 0
Помогите с SQL запросом
    #32389825
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
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
10 сообщений из 10, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Помогите с SQL запросом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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