我正在嘗試通過執行 amount*price_for_each 來計算交易的總價值。
例如,5 個大蒜、8 個面包、1 個雞肉和 1 個米飯。大蒜(從物品)的價格是25,面包是200,雞肉是450,米飯是200。5?25 8?200 1?450 1?200=2125
CREATE TABLE Items(
price_for_each INT,
name VARCHAR(20),
PRIMARY KEY(name)
);
CREATE TABLE ItemsInTransactions(
name VARCHAR(20),
t_id INT,
amount INT,
FOREIGN KEY(name) references Items(name),
FOREIGN KEY(t_id) references Transactions(t_id)
);
CREATE VIEW TransactionValue AS
SELECT DISTINCT t_id,sum(amount*price_for_each) as value
FROM Items price_for_each, ItemsInTransactions amount
GROUP BY t_id
ORDER BY t_id;
我認為問題出在我看來,輸出值遠高于預期,這使我相信存在算術錯誤(可能乘以過多)。如果有人能解釋一種更好的方法來計算我的輸出,我將不勝感激
在此處輸入圖片說明
uj5u.com熱心網友回復:
FROM Items price_for_each, ItemsInTransactions amount是舊的不推薦使用的交叉連接方式(生成 Items 和 ItemsInTransactions 記錄的每個組合)。你想要一個內部連接:
FROM ItemsInTransactions amount
INNER JOIN Items price_for_each on price_for_each.name=amount.name
因此,您只是在查找相關商品的每個價格。
其他一些評論: DISTINCT 在這里是多余的,您的 group by 已經確保每個 t_id 只有一行。表別名應該有助于記錄您的查詢正在做什么,或者只是允許您更簡潔地參考表欄位;在這里,您使用的別名描述了您從表中獲得的內容,這并不是特別有用。
uj5u.com熱心網友回復:
您正在使用交叉連接,它將結合所有可用的烏鴉
最好總是使用連接
CREATE VIEW TransactionValue AS
SELECT t_id,sum(amount*price_for_each) as value
FROM Items i JOIN ItemsInTransactions iit ON i.name = iit.name
GROUP BY t_id
ORDER BY t_id;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/338405.html
