第一次发帖!
因此,作为一个 SQL 和数据库方面的年轻学徒,我正在为企业创建一个数据库来管理订单/商品/价格等。我想创建一个来自 3 个链接表的 View {items,prices,discounts }(见底部的表格)计算并显示项目的总价。通常,折扣列不应该为零(因为我们只希望表 discounts
条目具有实际折扣,而不是 0)
我想从以下条目中显示所有,但我的 View 仅显示有折扣的条目。
insert into items (`item_id`,`item_name`, `item_quantity`) values
(102,'item1',20),
(103,'item2',20),
(404,'item3',20); # <-- It won't be shown if I do SELECT * FROM view;
insert into discounts (`item_id`,`discount`) values
(102,50),
(103,25);
insert into prices (`item_id`,`price`) values
(102,100),
(103,100),
(404,100);
这是我的观点:
CREATE VIEW ItemsPrice AS
SELECT
i.item_id,
i.item_name,
SUM((1-d.discount/100)*p.price*i.item_quantity)
FROM
items AS i
INNER JOIN
prices AS p ON i.item_id=p.item_id
INNER JOIN
discounts AS d ON (p.item_id=d.item_id)
GROUP BY item_id
ORDER BY total;
这是我的表格(以防我弄错了):
DROP TABLE IF EXISTS `items`;
CREATE TABLE `items` (
`item_id` int(30) NOT NULL,
`item_name` varchar(35) NOT NULL,
`item_quantity` double(25,0) ,
PRIMARY KEY (`item_id`)
);
#2=======
DROP TABLE IF EXISTS `prices`;
CREATE TABLE `prices` (
`item_id`int(30) NOT NULL,
`price` decimal(30,2) NOT NULL,
PRIMARY KEY (`item_id`),
CONSTRAINT `prices_ibfk_1` FOREIGN KEY (`item_id`) REFERENCES `items` (`item_id`)
);
#3=======
DROP TABLE IF EXISTS `discounts`;
CREATE TABLE `discounts` (
`item_id` int(30) NOT NULL,
`discount` int(3) NOT NULL,
PRIMARY KEY (`item_id`),
CONSTRAINT `discount_ibfk_1` FOREIGN KEY (`item_id`) REFERENCES `items` (`item_id`)
);
很抱歉没有提供架构。不知道怎么做。
希望我没有浪费你太多时间!你是我的英雄。
最佳答案
你只需要一个左连接——这将获取所有有价格的商品,即使它们没有折扣。您使用 COALESCE 将 NULL 折扣替换为有效数字。
SELECT
i.item_id,
i.item_name,
COALESCE(d.discount,0) as discount,
p.price,
i.item_quantity
FROM
items AS i
INNER JOIN
prices AS p ON i.item_id=p.item_id
LEFT JOIN
discounts AS d ON (p.item_id=d.item_id)
GROUP BY item_id
ORDER BY total;
您对 COALESCE 的查询:
SELECT
i.item_id,
i.item_name,
(1-COALESCE(d.discount,0)/100)*p.price*i.item_quantity) as totalAmount
FROM
items AS i
INNER JOIN
prices AS p ON i.item_id=p.item_id
LEFT JOIN
discounts AS d ON (p.item_id=d.item_id)
GROUP BY item_id
ORDER BY total;
关于MySQL-当其中的变量不存在时获取 SUM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43502398/