Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL:若条件(表中的行)上并没有匹配项,则返回默认值和不同表中匹配的行_Sql - Fatal编程技术网

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%像我需要的那样工作