2017-01-23 21 views
1

私はテーブルがClinic,StockおよびStockLogの3つあります。SQL:条件に一致するものがない場合(テーブル内の行)、デフォルト値を返し、異なるテーブルから一致する行

すべての行を取得する必要がありますwhere Stock.stock < 5。注文があった場合、それが何であるかを示す必要があります。これはテーブルStocklogにあります。

ユーザはになる注文をせずにStockテーブルに在庫レベルを設定できるという問題があります。

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 

私のクエリの問題は、私がStockLogで発見されていない行を失うということです。

これを書く方法に関するヘルプ。

ありがとうございます。

+0

ストックログに右結合を試してください – Sreemat

+1

どのDBMSをお使いですか? –

答えて

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 ; 

あなたはStockWHERE条件に従う)内のすべての行を維持したいです。だから考えてみてください: "StockFROMの最初のテーブルにし、他のすべてのテーブルにLEFT JOINを使用してください。"

+0

ありがとうございました...私はそれが必要なように100%働いた – red8alice

0

ClinicとStockに参加した結果の行をすべて保持する場合は、LEFT OUTER JOINをStockLogで使用します。どのSQLを使用しているのか分かりません(SQL Server、MySQL、PostgreSQL、Oracle)ので、正確な例はありませんが、関連するドキュメントの「左外部結合」を検索すると機能するはずです。

さまざまな種類の結合については、this Stack Overflow postを参照してください。

関連する問題