SQL:如果条件不匹配(表中的行),则返回默认值和从不同表匹配的行

时间:2017-01-23 18:03:36

标签: sql

我有三个表:switch lower(opts.color) case {'rgb', 'opponent'} ... end ClinicStock

我需要获取所有行StockLog。我还需要显示订单是否已下达以及订单数量是多少;可在表where Stock.stock < 5中找到。

问题是,用户可以在Stocklog表格中设置自己的库存水平,而无需下达Stock的订单。

我需要一个查询,可以:返回Stocklog表中的行,并获取Stock表中的相关订单金额。如果Stocklog中没有下订单,则将金额设置为零金额。

我试过了:

StockLog

我的查询问题是我丢失了SELECT Clinic.Name, Stock.NameOfMedication, Stock.Stock, StockLog.OrderAmount FROM Clinic JOIN Stock ON Stock.ClinicID = Clinic.ClinicID JOIN StockLog ON StockLog.StockID = Stock.StockID WHERE Stock.Stock <= 5 中找不到的行。

有关如何撰写本文的任何帮助。

谢谢。

2 个答案:

答案 0 :(得分:0)

如果要保留加入Clinic和Stock所产生的所有行,请使用带有StockLog的LEFT OUTER JOIN。我不知道你使用的是哪个SQL(SQL Server,MySQL,PostgreSQL,Oracle),所以我不能给你一个确切的例子,但是在相关文档中搜索“left outer join”应该可行。

有关各种连接的说明,请参阅this Stack Overflow post

答案 1 :(得分:0)

我认为查询应该如下所示:

SELECT c.Name, s.NameOfMedication, s.Stock,
       COALESCE(sl.OrderAmount, 0) as OrderAmount
FROM Stock s LEFT JOIN
     Clinic c
     ON s.ClinicID = c.ClinicID LEFT JOIN
     StockLog sl
     ON sl.StockID = s.StockID
WHERE s.Stock <= 5 ;

您希望将所有行保留在Stock中(受WHERE条件限制)。因此,请考虑:&#34;将Stock作为FROM中的第一个表格,并将LEFT JOIN用于所有其他表格。&#34;