0

我有一个查询,它对两个表进行一些比较并返回这些结果中的最小值。

问题是,我使用的是内部联接,如果没有匹配的行,即该行不存在,则该字段为空白。

我想知道是否有办法改变它,所以如果该行不存在,它仍然会返回一个值。

这是我的查询:

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 JOINCOALESCE()

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 回答