Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запрос with HAVING / 17 сообщений из 17, страница 1 из 1
31.05.2004, 18:53
    #32541615
Invisible
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос with HAVING
Погите плз. разобраться с 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
31.05.2004, 19:04
    #32541625
Varan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос with HAVING
Ну так напиши Or вместо And
...
Рейтинг: 0 / 0
31.05.2004, 19:05
    #32541627
Invisible
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос with HAVING
Тогда товар3 будет...
...
Рейтинг: 0 / 0
31.05.2004, 19:11
    #32541631
АлексейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос with HAVING
SELECT distinct Таблица.Товар
FROM Таблица
where Таблица.страна='страна56' AND Таблица.поставщик='поставщик47'
...
Рейтинг: 0 / 0
31.05.2004, 19:19
    #32541641
Varan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос with HAVING
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
31.05.2004, 19:20
    #32541645
Varan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос with HAVING
Прошу прощения, ошибся, АлексейК прав, условие невнимательно прочитал.
...
Рейтинг: 0 / 0
31.05.2004, 19:21
    #32541647
Invisible
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос with HAVING
Distinct ничего не дал. Выводится только Товар1.

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

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

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

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

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

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

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

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

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

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

все можно проверить практически залей в свою таблицу тысяч 10 записей и засекай таймер...
...
Рейтинг: 0 / 0
31.05.2004, 20:45
    #32541700
(c)VIG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос with HAVING
Да... Старею :)
Код: 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
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запрос with HAVING / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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