我创建一个包含四个不同表的数据库:Oracle事务更新量从一个表到另一个
CUSTOMER (PK CUST_ID, CUST_NAME, CUST_ADDRESS)
INVOICE (PK INVOICE_ID, FK CUST_ID, INVOICE_AMOUNT)
PRODUCT (PK PRODUCT_ID, PRODUCT_NAME, PRODUCT_COST)
INVOICE_ITEM (PK FK INVOICE_ID, PK FK PRODUCT_ID,
INVOICE_ITEM_QUANTITY, INVOICE_ITEM_PRICE)
我需要建立一个交易:1)。将数据插入新的CUSTOMER
,2)。将数据插入新的INVOICE
(发票金额设为0),3)。插入两个新的INVOICE_ITEM
的数据(一行有INVOICE_ITEM_QUANTITY
设为2,INVOICE_ITEM_PRICE
为5.00,另一行为1和10.00)。
我能做到这一切,而不使用INSERT命令的任何问题,但下一步是绊倒了我,让
“更新INVOICE_AMOUNT添加在步骤3到INVOICE_ITEM_PRICE场添加的行项目。您必须使用可以工作的查询来执行此操作,而不管此INVOICE中是否存在INVOICE_ITEM行。您的查询无法硬编码金额。'
我无法弄清楚我会如何去做这件事。我一直在研究解决方案,但没有发现任何描述这个问题的东西,只有那些在列名相同的情况下才有效。
我可以直接将值插入到INVOICE_AMOUNT
,但这会被认为是硬编码的答案,对吗?所以我一直试图做一些沿线的
UPDATE INVOICE
SET INVOICE_ITEM.INVOICE_ITEM_PRICE = INVOICE.INVOICE_AMOUNT
WHERE INVOICE.INVOICE_ID = INVOICE_ITEM.INVOICE_ID
但我不能得到这个代码的任何变化工作。我确信有一些非常简单的答案,会让我感到很蠢,但如果有人能够帮助,我会非常感激。
对我来说,INVOICE_AMOUNT应该是'总和(invoice_Item.Invoice_Item_Price * Invoice_Item_Quantity)'所以你需要获得和确保它不是空(或者其无效,至少使其0) – xQbert
我也知道这一点,但在我的任务中注意到:您是否应该有一个INVOICE_AMOUNT字段值得怀疑,因为您始终可以查询INVOICE_ITEM表并为每个发票项目总结INVOICE_ITEM_QTY * INVOICE_ITEM_PRICE。但是,对于这项任务,我们假设我们想要这样做。 – CBevs
相似问题:http://stackoverflow.com/questions/2446764/update-statement-with-inner-join-on-oracle – xQbert