0

2 つのテーブル間でいくつかの比較を行い、それらの結果の最小値を返すクエリがあります。

問題は、内部結合を使用していて、一致する行がない場合、つまり行が存在しない場合、フィールドが空白になることです。

それを変更する方法があるかどうか疑問に思っているので、行が存在しない場合でも値を返します。

これは私のクエリです:

SELECT MIN(quantity_per_one * 5 < quantity) AS has_enough
FROM costs
INNER JOIN user_ingredients USING (IngredientID)

ユーザーが成分を持っていない場合、行は存在しません。これによりhas_enough、何も等しくなりません。なるように調整するにはどうすればよいですか0

テーブル構造:

table for costs

//note there can be multiple ingredients per materialID
ID | materialID | IngredientID | quantity_per_one
 1 |     5      |     6        |       60
 1 |     5      |     3        |       10

table for user's available ingredients

ID | UserID | IngredientID | quantity
1 |    2    |     6        |    100
4

1 に答える 1

1

LEFT JOINとを使用できますCOALESCE()

SELECT COALESCE(MIN(quantity_per_one * 5 <= quantity),0) AS has_enough
FROM costs
LEFT JOIN user_ingredients USING (IngredientID)

アップデート:

あなたがしたいことをするためにCASEステートメントが必要です:

SELECT MIN(CASE WHEN quantity IS NULL THEN 0
                               ELSE quantity_per_one * 5 < quantity
                          END) as 'has_enough'
FROM costs c
LEFT JOIN user_ingredients ui
  ON c.IngredientID = ui.IngredientID

デモ: SQL フィドル

于 2013-07-15T20:23:26.987 に答える