用 mysql 比较两个表
comparing two tables with mysql
我试图寻找这个问题的答案,但我不确定这个问题是否有任何答案,因为我不太确定如何正确表达它...这里我有两个 tables
配方成分table
Recipe_id|ingredient_id
ifqvv |1
ifqvv |2
用户成分table
User_id|ingredient_id
1 |1
1 |2
2 |1
3 |3
我需要将这些 table 与如果食谱和用户 ingredients_id 完全匹配它将 return 为 1 进行比较,或者如果成分大于 0 它'll return a 2, and 3 for no matches.例如,对用户 1 的查询将 return a 1,用户 2 a 2,用户 3 a 3。我不确定这是否是我必须编写的代码,但有人告诉我这是可能的,几乎没有信息,这让我来到这里
假设您还有一个 user
table,您可以通过将 user
与 recipe_ingredients
table 交叉连接然后离开来实现- 加入 user_ingredients
table,例如:
SELECT u.user_id, ri.recipe_id,
COUNT(ui.ingredient_id) AS available_ingredients, -- Number of ingredients the user has that are required to cook this recipe
COUNT(ri.ingredient_id) AS required_ingredients, -- Number of ingredients that are required to cook this recipe
CASE
WHEN COUNT(ui.ingredient_id) = COUNT(ri.ingredient_id) THEN 'can_cook'
WHEN COUNT(ui.ingredient_id) > 0 THEN 'has_some_ingredients'
ELSE 'has_no_ingredients'
END AS state
FROM users u
CROSS JOIN recipe_ingredients ri
LEFT JOIN user_ingredients ui ON(ri.ingredient_id = ui.ingredient_id AND u.user_id = ui.user_id)
GROUP BY u.user_id, ri.recipe_id
ORDER BY u.user_id, ri.recipe_id
如果你想将其限制为某个用户/食谱,只需使用 where 子句:
WHERE u.user_id = 1 AND ri.recipe_id = 'ifqvv'
您可以在这里现场试用:DB Fiddle
如果你没有 users
table 那么你可以替换
FROM users u
和 FROM (SELECT DISTINCT user_id FROM user_ingredients) u
DB Fiddle
我试图寻找这个问题的答案,但我不确定这个问题是否有任何答案,因为我不太确定如何正确表达它...这里我有两个 tables
配方成分table
Recipe_id|ingredient_id
ifqvv |1
ifqvv |2
用户成分table
User_id|ingredient_id
1 |1
1 |2
2 |1
3 |3
我需要将这些 table 与如果食谱和用户 ingredients_id 完全匹配它将 return 为 1 进行比较,或者如果成分大于 0 它'll return a 2, and 3 for no matches.例如,对用户 1 的查询将 return a 1,用户 2 a 2,用户 3 a 3。我不确定这是否是我必须编写的代码,但有人告诉我这是可能的,几乎没有信息,这让我来到这里
假设您还有一个 user
table,您可以通过将 user
与 recipe_ingredients
table 交叉连接然后离开来实现- 加入 user_ingredients
table,例如:
SELECT u.user_id, ri.recipe_id,
COUNT(ui.ingredient_id) AS available_ingredients, -- Number of ingredients the user has that are required to cook this recipe
COUNT(ri.ingredient_id) AS required_ingredients, -- Number of ingredients that are required to cook this recipe
CASE
WHEN COUNT(ui.ingredient_id) = COUNT(ri.ingredient_id) THEN 'can_cook'
WHEN COUNT(ui.ingredient_id) > 0 THEN 'has_some_ingredients'
ELSE 'has_no_ingredients'
END AS state
FROM users u
CROSS JOIN recipe_ingredients ri
LEFT JOIN user_ingredients ui ON(ri.ingredient_id = ui.ingredient_id AND u.user_id = ui.user_id)
GROUP BY u.user_id, ri.recipe_id
ORDER BY u.user_id, ri.recipe_id
如果你想将其限制为某个用户/食谱,只需使用 where 子句:
WHERE u.user_id = 1 AND ri.recipe_id = 'ifqvv'
您可以在这里现场试用:DB Fiddle
如果你没有 users
table 那么你可以替换
FROM users u
和 FROM (SELECT DISTINCT user_id FROM user_ingredients) u
DB Fiddle