用 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,您可以通过将 userrecipe_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 uFROM (SELECT DISTINCT user_id FROM user_ingredients) u
DB Fiddle