通过此MS-Access查询帮助我

时间:2010-04-13 15:43:58

标签: sql ms-access

我有两张桌子:“产品”和“件”

产品

idProd
product
price

PIECES

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€

TABLE PIECES (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));

更多信息

表“产品”包含在商店中销售的所有产品 表“”是对复合产品的控制。要知道那些是孩子的产品。例如复合产品:计算机。本产品由其他产品(主板,硬盘,内存,CPU等)组成。

2 个答案:

答案 0 :(得分:0)

您有重复的加入:

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

,其他联接最有可能是OR:

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

从表格结构我可以看出来。不确定“vinculated”究竟意味着什么,我猜是“相关”。如果是这种情况,我不确定您是如何将idProductMain和idProductChild与产品表相关联的。也许一些数据样本会有所帮助。

编辑:

好的,看起来连接是向后的

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

我认为那会让你大部分都在那里。

答案 1 :(得分:0)

我认为你所寻找的东西比你到目前为止所做的要简单得多。

基本上你需要做的就是找到所有产品和数量(参见下面的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'的值,这是你需要计算其总价的产品的ID。

我希望这会有所帮助。