SQL:若条件(表中的行)上并没有匹配项,则返回默认值和不同表中匹配的行
我有三张表:SQL:若条件(表中的行)上并没有匹配项,则返回默认值和不同表中匹配的行,sql,Sql,我有三张表:Clinic、Stock和StockLog 我需要获取所有行where Stock.Stock
Clinic
、Stock
和StockLog
我需要获取所有行where Stock.Stock<5
。我还需要显示是否已下订单以及订单金额;可在表Stocklog
中找到
问题在于,用户可以在stock
表中设置其库存水平,而无需下订单,该订单将转到Stocklog
我需要一个查询,可以:返回Stock
表中的行,并获取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
选择
诊所,名字,
股票。药物名称,股票。股票,
StockLog.OrderAmount
从…起
医务室
参加
Stock ON Stock.ClinicID=Clinic.ClinicID
参加
StockLog.StockID=Stock.StockID上的StockLog
哪里
Stock.Stock如果要保留加入Clinic和Stock后产生的所有行,请使用StockLog的左外部联接。我不知道您使用的是哪种SQL(SQL Server、MySQL、PostgreSQL、Oracle),因此我无法给出一个精确的示例,但在相关文档中搜索“左外联接”应该可以
有关各种联接的说明,请参阅。如果要保留联接Clinic和Stock产生的所有行,请使用StockLog的左外部联接。我不知道您使用的是哪种SQL(SQL Server、MySQL、PostgreSQL、Oracle),因此我无法给出一个精确的示例,但在相关文档中搜索“左外联接”应该可以
有关各种联接的解释,请参阅。我认为查询应该如下所示:
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 ;
选择c.名称、s.药品名称、s.库存、,
合并(sl.OrderAmount,0)为OrderAmount
从s左连接
诊所c
在s.ClinicID=c.ClinicID左连接上
StockLog sl
在sl.StockID=s.StockID上
其中s.Stock我认为查询应该如下所示:
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 ;
选择c.名称、s.药品名称、s.库存、,
合并(sl.OrderAmount,0)为OrderAmount
从s左连接
诊所c
在s.ClinicID=c.ClinicID左连接上
StockLog sl
在sl.StockID=s.StockID上
WHERE s.Stock在StockLog上右键连接您使用的是哪些DBMS?在StockLog上右键连接您使用的是哪些DBMS?非常感谢。。。它100%的工作,就像我需要它来感谢你这么多。。。它100%像我需要的那样工作