Mysql 如何从if语句中的多个选择将值返回到视图?
我是SQL新手,我正试图弄清楚,如何创建一个视图,在该视图中,产品的价格会相应地发生变化——不管它是否有折扣。我该怎么办?我想我走错方向了。可能与连接有关? 欢迎提出任何建议Mysql 如何从if语句中的多个选择将值返回到视图?,mysql,sql,if-statement,multiple-select,Mysql,Sql,If Statement,Multiple Select,我是SQL新手,我正试图弄清楚,如何创建一个视图,在该视图中,产品的价格会相应地发生变化——不管它是否有折扣。我该怎么办?我想我走错方向了。可能与连接有关? 欢迎提出任何建议 CREATE VIEW AvailableProductsAndTheirPrices AS SELECT Product.Name, Product.Price, InStock.Quantity, Store.Name, Store.Adress FROM Product, InStock, Store WHERE
CREATE VIEW AvailableProductsAndTheirPrices AS
SELECT Product.Name,
Product.Price,
InStock.Quantity, Store.Name, Store.Adress
FROM Product, InStock, Store
WHERE
InStock.Quantity > 0 AND
Product.PID = InStock.PID AND -- PID as in Product ID
InStock.FID = Store.FID -- FID as in Store ID
GO
产品价格线将被以下内容所取代:
(SELECT IIF( (SELECT Product.PID NOT IN (SELECT Product.PID FROM Discount)),
(SELECT Product.Price FROM .. how does this work?[1]), -- if there is no discount
(SELECT Product.Price * Discount.Discount -- otherwise apply discount to price
FROM Product, Discount
WHERE Product.PID = Discount.PID AND GETDATE() <= Discount.To)
)
),
[1] 如果我没有弄错,它将返回第一行的值。注意:我没有表结构,因此下面的查询可能不是100% 尝试类似以下查询的操作:
CREATE VIEW AvailableProductsAndTheirPrices AS
SELECT Product.Name,
Product.Price*COALESCE(Discount.Discount,1) AS Price
InStock.Quantity,
Store.Name,
Store.Adress
FROM Product
INNER JOIN InStock
ON Product.PID = InStock.PID
INNER JOIN Store
ON InStock.FID = Store.FID
LEFT JOIN Discount
ON Product.PID = Discount.PID
WHERE
InStock.Quantity > 0
GO
我使用左联接来引入折扣,如果产品有折扣,如果没有折扣,则使用空值。然后,coalesce函数将使用折扣(如果它有折扣),否则它将仅将价格乘以1。首先,我建议使用标准联接语法。然后可以使用折扣表的外部联接
@南菲边-时机不错-也是你的!只有一件事-代码缺少一个名称列的别名,否则就是我要找的,谢谢!比我想做的简单多了。我可能应该掌握连接语法的窍门。
CREATE VIEW AvailableProductsAndTheirPrices AS
SELECT P.Name,
P.Price * COALESCE(D.Discount,1),
I.Quantity,
S.Name,
S.Adress
FROM Product P
INNER JOIN InStock I ON P.PID = I.PID
INNER JOIN Store S ON P.FID = I.FID
LEFT JOIN Discount D ON P.PID = D.PID AND D.To > Now()
WHERE I.Quantity > 0
GOm