我有两张桌子:“产品”和“件”
产品
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等)组成。
答案 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。
我希望这会有所帮助。