powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запрос with HAVING
17 сообщений из 17, страница 1 из 1
Запрос with HAVING
    #32541615
Invisible
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Погите плз. разобраться с HAVING.

Есть Таблица, содержащая ключевое наименование товара, страну, откуда он пришел и конкретно поставщика.

Нужно вывести те товары, которые могут придти от указанного поставщика в Таблице2 и указанной страны в Таблице3 в пределах одного запроса.

То есть: (условия: отбираются товары, где есть и страна56 и поставщик47 )
товар1 страна56 поставщик47
товар1 страна13 поставщик84
товар1 страна65 поставщик34
товар1 страна10 поставщик23

товар2 страна56 поставщик90
товар2 страна13 поставщик12
товар2 страна65 поставщик47
товар2 страна10 поставщик23

товар3 страна56 поставщик90
товар3 страна13 поставщик12
товар3 страна65 поставщик55
товар3 страна10 поставщик23

В данном примере нужно выбрать Товар1 и Товар2, но он выбирает только товар1, т.к. работает по принципу WHERE AND, блин.

Вот мои наброски, но он выбирает только товар1.

SELECT Таблица.Товар
FROM (Таблица INNER JOIN Таблица2 ON Таблица.p8 = Таблица2.d8) INNER JOIN Таблица3 ON Таблица.p9 = Таблица3.c9
GROUP BY Таблица.F1, Таблица2.FlagD, Таблица3.FlagC
HAVING (((Таблица2.FlagD)=True) AND ((Таблица3.FlagC)=True));
...
Рейтинг: 0 / 0
Запрос with HAVING
    #32541625
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так напиши Or вместо And
...
Рейтинг: 0 / 0
Запрос with HAVING
    #32541627
Invisible
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда товар3 будет...
...
Рейтинг: 0 / 0
Запрос with HAVING
    #32541631
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SELECT distinct Таблица.Товар
FROM Таблица
where Таблица.страна='страна56' AND Таблица.поставщик='поставщик47'
...
Рейтинг: 0 / 0
Запрос with HAVING
    #32541641
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SELECT test.fk_tovar
FROM test
WHERE (((test.FK_Country)=1)) OR (((test.FK_Supplier)=2))
GROUP BY test.fk_tovar
WITH OWNERACCESS OPTION;
для таблицы test(fk_tovar,FK_Country,FK_Supplier) если я условие правильно понял.
...
Рейтинг: 0 / 0
Запрос with HAVING
    #32541645
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу прощения, ошибся, АлексейК прав, условие невнимательно прочитал.
...
Рейтинг: 0 / 0
Запрос with HAVING
    #32541647
Invisible
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Distinct ничего не дал. Выводится только Товар1.

Я знаю способ:
SELECT Таблица.Товар
FROM Таблица
where Таблица.страна='страна56'

SELECT Таблица.Товар
FROM Таблица
where Таблица.поставщик='поставщик47'

SELECT Таблица.Товар
from первыйзапрос join второйзапрос on первыйзапрос.товар=второйзапрос.товар

Но мне нужно это как-нить перестроить енту весч в один запрос ( возможно с использованием HAVING)
...
Рейтинг: 0 / 0
Запрос with HAVING
    #32541649
Invisible
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О пока писал Алексею...
2 Varan: сейчас попробую.
...
Рейтинг: 0 / 0
Запрос with HAVING
    #32541652
Invisible
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Varan: Мммда... Выводит все товары по принципу ИЛИ
...
Рейтинг: 0 / 0
Запрос with HAVING
    #32541653
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
теперь понял суть...

если в понятном виде то так:

Код: plaintext
1.
2.
3.
SELECT distinct Таблица.Товар
FROM Таблица 
where 'страна56' in (select Таб1.страна from Таблица as Таб1 where Таблица.Товар = Таб1.Товар ) 
and 'поставщик47' in (select Таб2.поставщик from Таблица as Таб2 where Таблица.Товар = Таб2.Товар )
...
Рейтинг: 0 / 0
Запрос with HAVING
    #32541657
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
SELECT Таблица.Товар
FROM Таблица 
group by Таблица.Товар
having (sum(iif(Таблица.Страна='страна56', 1 , 0 ))> 0 ) and (sum(iif(Таблица.Поставщик='поставщик47', 1 , 0 ))> 0 ) 
...
Рейтинг: 0 / 0
Запрос with HAVING
    #32541661
Invisible
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 АлексейК: Я читал здесь же на форуме, что JOIN в ХУДШЕМ случае работает не медленнее .

IN по сути является тем же JOIN-ом. Раз уж так, то есть ли смысл отдать предпочтение (в плане скорости) JOIN-у?
...
Рейтинг: 0 / 0
Запрос with HAVING
    #32541665
Invisible
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 (c)VIG: ООО, дааа. Подскажите, господа, что быстрее будет работать? (Имеется ввиду так... в принципе, на вскидку)
...
Рейтинг: 0 / 0
Запрос with HAVING
    #32541669
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Invisible
у программиста почти всегда есть выбор из нескольких решений у каждого есть свои достоинства и недостатки.

In работает медленнее join

iif + группировка сопоставимо

а решения для данной задачи чистыми join я не нашел так как у тебя поставщик и страна могут быть в разных строках. все равно нужен подчиненный запрос... или так как (c)VIG исхитрился
...
Рейтинг: 0 / 0
Запрос with HAVING
    #32541678
Invisible
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 АлексейК: Спасибо за ответ. Хотел уточнить iif + группировка - сопоставимо по скорости с join? iif + группировка, как в варианте (c)VIG-а?
...
Рейтинг: 0 / 0
Запрос with HAVING
    #32541682
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
группировка уже не сопоставимо по скорости с join

все можно проверить практически залей в свою таблицу тысяч 10 записей и засекай таймер...
...
Рейтинг: 0 / 0
Запрос with HAVING
    #32541700
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да... Старею :)
Код: plaintext
1.
2.
3.
4.
5.
select distinct q1.Товар
from 
 (select Товар from Таблица where страна='страна56') as q1
inner join
 (select Товар from Таблица where поставщик='поставщик47') as q2
on q1.tovar=q2.tovar
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запрос with HAVING
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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