我有一个查询,可以对两个表进行一些比较,并返回这些结果中的最小值。
问题是,我正在使用内部联接,如果没有匹配的行,即行不存在,则该字段为空。
我想知道是否有办法改变它,所以如果该行不存在,它仍然会返回一个值。
这是我的疑问:
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
答案 0 :(得分: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 Fiddle