Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Базы данных MySQL

  Все выпуски  

RusFAQ.ru: Базы данных SQL


Новое направление Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Базы данных SQL

Выпуск № 340
от 10.02.2008, 19:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 444, Экспертов: 48
В номере:Вопросов: 1, Ответов: 4

Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>


Вопрос № 121818: Здравствуйте ув. эксперты! Есть такой вопрос, думаю не легкий. Есть таблица Товары (содержит информацию о товаре), а также три таблицы Магазин1, Магазин2, Магазин3. В них есть такие поля: ИдТовара, Наличие,Приход,Продажи. Мне надо составить з...

Вопрос № 121.818
Здравствуйте ув. эксперты!
Есть такой вопрос, думаю не легкий. Есть таблица Товары (содержит информацию о товаре), а также три таблицы Магазин1, Магазин2, Магазин3. В них есть такие поля: ИдТовара, Наличие,Приход,Продажи.
Мне надо составить запрос так, чтобы в результате запроса были такие колонки: ну собственно сама информация о товара, а также Магазин1, Магазин2, Магазин3. В последних трех колонках должно стоять количество товара в данном магазине, а если такого нету, то нуль. Это количество берется из поля Наличие в каждой таблице Магазин.
Не знаю, может я как-то неправильно составил таблицы и связь между ними, но я уже долго мучаюсь, а такого запроса составить не могу. Возвращает тока те товары, которые есть во всех трех магазинах. Но мне надо получить именно такой результат.
ЗЫ: В таблицах Магазин хранится инфа тока о том товаре, который там есть, т.е. нулей нету.
ЗЫ:ЗЫ: делаю в MS Access
Отправлен: 05.02.2008, 19:16
Вопрос задал: BerdArt (статус: 3-ий класс)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Zubex
Здравствуйте, BerdArt!
Таблицы, на мой взгляд, дествительно составлены не правильно. Вместо 3-х таблиц магазинов надо было сформировать таблицу "Магазины" со столбцами ID, MAGAZ_NAME, а также одну таблицу типа "Склад" с полями ИдМагазина,ИдТовара, Наличие,Приход,Продажи. Ну и связать их по Ид. Это позволит не привязываться только к трем магазинам.

Но и в Вашем случае можно составить запрос примерно такого вида:
select т.Ид, [т.остальные поля,]
(select м1.Наличие from Магазин1 м1 where м1.ИдТовара=т.Ид) mag1,
(select м2.Наличие from Магазин2 м1 where м2.ИдТовара=т.Ид) mag2,
(select м3.Наличие from Магазин3 м3 where м3.ИдТовара=т.Ид) mag3
from Товары т

Удачи!
---------
Если не знаешь что сказать - лучше промолчи...
Ответ отправил: Zubex (статус: 7-ой класс)
Ответ отправлен: 05.02.2008, 22:25
Оценка за ответ: 5
Комментарий оценки:
Спасибо за ваше участие.
1. Да, думаю что такой проект таблиц будет правильным и удобным даже в использовании. Но, к сожалению, он не решал той проблемы что была. Все равно проблема не существования таких полей оставалась. Но...
2. такой запрос, как вы предлагаете, действительно, можно сказать, решает ее. Правда, в результате такого запроса вместо желаемых нулей получаются пустые клетки, но может быть так даже удобнее работать и к тому же Access их принимает за нулевые и если посчитать сумму, то она будет верной. И еще один недостаток - все поля запроса не редактируемые!!!! даже инфа о товаре. А это не есть гуд

Отвечает: Тесленко Евгений Алексеевич
Здравствуйте, BerdArt!
Создайте групповой запрос с параметрами объединения:
Всех записей из таблицы товары с таблицей Магазин1, в которых связанные поля совпадают.
FROM Товары LEFT JOIN Магазин1 ON Товары.Id_Товары = Магазин1.Id_Товары

"Три последних" могут формироваться так:
Sum(IIf(IsNull([Магазин?]![количество]),0,[Магазин?]![количество]))

Евгений.
Ответ отправил: Тесленко Евгений Алексеевич (статус: Студент)
Ответ отправлен: 06.02.2008, 02:40
Оценка за ответ: 5
Комментарий оценки:
Дело в том что присоединяемые таблицы через JOIN должны иметь связь друг с другом по очереди присоединения, а мне надо, чтобы все приписываемые таблицы зависели от первой (главной)
Ну а вторая часть вашего ответа действительно то, что мне нужно. Большое спасибо!!! Жаль правда, что эти ячейки не редактируются теперь, но по другому невозможно. Еще раз спасибо.

Отвечает: Челноков Виктор Альбертович
Здравствуйте, BerdArt!
Используйте в запросе объеденение один ко многим.
Т.е. одна запись в табл товары и много записей в табл. магазин.
Ответ отправил: Челноков Виктор Альбертович (статус: 5-ый класс)
Ответ отправлен: 06.02.2008, 08:54
Оценка за ответ: 4
Комментарий оценки:
Спасибо за то, что откликнулись, но к сожалению ничего полезного из вашего ответа почерпнуть не удалось

Отвечает: Serge R. Bochkareff
Здравствуйте, BerdArt!
Видимо вам необходимо сделать объединение трех запросов. Точно не помню, но в оракле есть такая штука как union

select field1, field2, field3
from table1
where ...
union all
select field1, field2, field3
from table2
where ...
union all
select field1, field2, field3
from table3
where ...

А похорошему таблица магазинов должна быть одна. Должно быть поле определяющее id магазина

table good
gid
name
price_buy
price_sale
... etc

table shops
sid
name
address

table container
cid
gid
sid
count
sold
shipping
income

Что-то в этом духе. Не стоит хранить в принципе одни и те же данные в разных таблицах.
Ответ отправил: Serge R. Bochkareff (статус: 1-ый класс)
Ответ отправлен: 06.02.2008, 09:12
Оценка за ответ: 4
Комментарий оценки:
Union здесь не подходит, т.к. он присоединяет какую либо инфу в следующих строках! а не столбцах.
А за структуру таблиц большое спасибо, думаю это более правильно, чем у меня было.


Вы имеете возможность оценить этот выпуск рассылки.
Нам очень важно Ваше мнение!
Оценить этот выпуск рассылки >>

Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2008, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.70 от 17.01.2008
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное