Помогите мне с этим MS-Access Query - PullRequest
0 голосов
/ 13 апреля 2010

У меня есть 2 таблицы: «продукты» и «кусочки»

Продукты

idProd
product
price

ЧАСТИ

id
idProdMain
idProdChild
quant

idProdMain и idProdChild связаны с таблицей: "products".

Другими соображениями является то, что 1 товар может иметь несколько частей, а 1 продукт может быть частью.

Цена товара равна сумме количества * Цена всех их штук.

Таблица «Продукты» содержит все продукты (p

Пример: * * тысяча двадцать-пять СТОЛОВЫЕ ИЗДЕЛИЯ (idProd - продукт - цена) 1 - Computer - 300€ 2 - Hard Disk - 100€ 3 - Memory - 50€ 4 - Main Board - 100€ 5 - Software - 50€ 6 - CDroms 100 un. - 30€ ЧАСТИ СТОЛА (id - idProdMain - idProdChild - Quant.) 1 - 1 - 2 - 1 2 - 1 - 3 - 2 3 - 1 - 4 - 1 ЧТО МНЕ НУЖНО?

Мне нужно обновить цену основного продукта при изменении цены дочернего продукта (шт.). Следуя предыдущему примеру, если я изменю цену на этот продукт «память» (это тоже кусок) на 60 €, то продукт «Компьютер» должен будет изменить свою цену на 320 €

Как я могу сделать это с помощью запросов?

Я уже пробовал это, чтобы получить цену основного продукта, но не работает. Этот запрос не возвращает никакого значения:

SELECT Sum(products.price*pieces.quant) AS Expr1
FROM products LEFT JOIN pieces ON (products.idProd = pieces.idProdChild) AND (products.idProd = pieces.idProdChild) AND (products.idProd = pieces.idProdMain)
WHERE (((pieces.idProdMain)=5));

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ

В таблице " products " содержатся все товары, которые можно продать в магазине.
Таблица " штук " предназначена для контроля над составными продуктами. Чтобы знать, кто продукты детей. Например, составной продукт: компьютеры. Этот продукт состоит из других продуктов (материнская плата, жесткий диск, память, процессор и т. Д.)

Ответы [ 2 ]

0 голосов
/ 18 октября 2011

Я думаю, то, что вы ищете, намного проще, чем то, что вы пробовали до сих пор.

По сути, все, что вам нужно сделать, - это найти все продукты и количества (см. Ниже предложение INNER JOIN), которые являются компонентами данного продукта (см. Предложение WHERE), и суммарные цены * увеличены (см. Предложение SELECT):

SELECT 
   SUM(products.price * pieces.quant) as totalPrice 
FROM 
   pieces INNER JOIN products ON (products.idProd = pieces.idProdChild)
WHERE 
   pieces.idProdMain = x 

Когда вы запускаете его, он запрашивает у вас значение 'x', которое является идентификатором продукта, общую стоимость которого вам нужно рассчитать.

Надеюсь, это поможет.

0 голосов
/ 13 апреля 2010

У вас есть двойное соединение:

(products.idProd = pieces.idProdChild) AND (products.idProd = pieces.idProdChild)

и другое соединение, скорее всего, должно быть ИЛИ:

LEFT JOIN pieces ON (products.idProd = pieces.idProdChild) OR (products.idProd = pieces.idProdMain)

из того, что я могу сказать по структуре таблицы. Не уверен, что именно означает "vinculated", я думаю, "освобожден". Если это так, я не уверен, как вы связываете idProductMain и idProductChild с таблицей продуктов. Может быть, помогут некоторые образцы данных.

EDIT:

Хорошо, похоже, что соединение обратное

LEFT JOIN pieces ON (products.idProdChild = pieces.idProd) OR (products.idProdMain = pieces.idProd)

Я думаю, это поможет вам пройти большую часть пути.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...