Mysql 如何从if语句中的多个选择将值返回到视图?

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

我是SQL新手,我正试图弄清楚,如何创建一个视图,在该视图中,产品的价格会相应地发生变化——不管它是否有折扣。我该怎么办?我想我走错方向了。可能与连接有关? 欢迎提出任何建议

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