Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / SELECT запрос, помогите пожалуйста, до утра надо разобраться. / 8 сообщений из 8, страница 1 из 1
15.03.2006, 05:03
    #33600995
Cyric
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT запрос, помогите пожалуйста, до утра надо разобраться.
Вобщем нужно вывести список товаров, которые хранятся на каждом складе.
Хотел сделать это с помощью конструкции:

SELECT Имя FROM Товары WHERE NOT EXISTS (;
SELECT id FROM Склады WHERE NOT EXISTS(;
SELECT * FROM Хранение WHERE (Хранение.склад=Склады.id) AND (Хранение.Товар=Товары.id)))

Т.е. должен выбирать Товары, для которых нет Складов, таких, чтобы на них не находился наш товар.
Но к сожалению FoxPro не хочет обрабатывать больше двух вложенных SELECT'ов, ругается с ошибкой.
Какой альтернативный вариант есть?

Выручите пожалуйста, пытаюсь доделать курсовую человеку, которого отчислить могут если не сдаст :(
...
Рейтинг: 0 / 0
15.03.2006, 06:08
    #33601019
ivenhoe
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT запрос, помогите пожалуйста, до утра надо разобраться.
Может, временную таблицу сделать, куда результат самого внутреннего запроса скидывать?
...
Рейтинг: 0 / 0
15.03.2006, 06:27
    #33601024
w3d
w3d
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT запрос, помогите пожалуйста, до утра надо разобраться.
Итак, имеем:
Товар.id
Товар.Имя
Склады.id
Хранение.Склад
Хранение.Товар
Надо: "вывести список товаров, которые хранятся на каждом складе"

Код: plaintext
1.
2.
3.
select Хранение.Склад, Товар.Имя from Хранение ;
left join Товар ;
on Хранение.Товар=Товар.id ;
group by Хранение.Склад, Товар.Имя
...
Рейтинг: 0 / 0
15.03.2006, 06:39
    #33601033
Cyric
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT запрос, помогите пожалуйста, до утра надо разобраться.
2 w3d
К сожалению выводит все товары (т.е. не только те, что на всех складах присутствуют), да ещё и по несколько раз, для каждого склада на котором присутствует, т.е. по сути всё содержимое таблицы "Хранение" вываливает.

2 ivenhoe
Я бы так и сделал, но внутренний запрос включает в себя условия, использующие данные из внешних запросов, т.е. временную таблицу создать не получится. По-крайней мере я не знаю как, возможно варианты есть, я их могу опробывать, главное чтоб работало как-то...
...
Рейтинг: 0 / 0
15.03.2006, 07:23
    #33601065
w3d
w3d
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT запрос, помогите пожалуйста, до утра надо разобраться.
Покажи таблички, или вышли в мыло в профиле
...
Рейтинг: 0 / 0
15.03.2006, 07:25
    #33601067
w3d
w3d
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT запрос, помогите пожалуйста, до утра надо разобраться.
Собственно говоря, твоя задача: "список товаров, которые хранятся на каждом складе" - это и есть таблица Хранение.
Уточни, что именно надо получить в результате.
...
Рейтинг: 0 / 0
15.03.2006, 16:14
    #33602966
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT запрос, помогите пожалуйста, до утра надо разобраться.
Подсчитай количество складов для каждого товара и сравни с общим количеством складов.

Т.е. выполняешь в 2 этапа:

1) Подсчет общего количества складов

Код: plaintext
1.
2.
LOCAL laStorage( 1 )
SELECT COUNT(*) FROM Склады INTO ARRAY laStorage

2) Определяю товары, которые есть на ВСЕХ складах

Код: plaintext
1.
2.
3.
4.
5.
SELECT Товары.Имя ;
FROM Товары ;
INNER JOIN Склады ON Склады.Товар=Товары.id
GROUP BY Товары.Имя ;
HAVING COUNT(DISTINCT Склады.Id)=m.laStorage
...
Рейтинг: 0 / 0
15.03.2006, 20:22
    #33603601
Cyric
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT запрос, помогите пожалуйста, до утра надо разобраться.
ВладимирМПодсчитай количество складов для каждого товара и сравни с общим количеством складов.

Т.е. выполняешь в 2 этапа:

1) Подсчет общего количества складов

Код: plaintext
1.
2.
LOCAL laStorage( 1 )
SELECT COUNT(*) FROM Склады INTO ARRAY laStorage

2) Определяю товары, которые есть на ВСЕХ складах

Код: plaintext
1.
2.
3.
4.
5.
SELECT Товары.Имя ;
FROM Товары ;
INNER JOIN Склады ON Склады.Товар=Товары.id
GROUP BY Товары.Имя ;
HAVING COUNT(DISTINCT Склады.Id)=m.laStorage


Жаль поздно уже..., но спасибо в любом случае, это именно то, что было нужно, сам не догадался почему-то.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / SELECT запрос, помогите пожалуйста, до утра надо разобраться. / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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