查询返回不包含数据的字段

时间:2013-07-15 20:20:03

标签: mysql

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

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

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

这是我的疑问:

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

1 个答案:

答案 0 :(得分: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 Fiddle