【问题标题】:comparing two tables with mysql用mysql比较两个表
【发布时间】:2019-12-26 00:40:27
【问题描述】:

我试图寻找这个问题的答案,但我不确定这个问题是否有任何答案,因为我不太确定如何正确地用词...这里有两张表

配方成分表

Recipe_id|ingredient_id
ifqvv    |1
ifqvv    |2

用户成分表

User_id|ingredient_id
1      |1
1      |2
2      |1
3      |3

我需要比较这些表,如果配方和用户成分_id 完全匹配,它将返回 1,或者如果成分大于 0,它将返回 2,如果没有匹配则返回 3。例如,对用户 1 的查询将返回 1、用户 2 a 2 和用户 3 a 3。我不确定这是否是我必须编写的代码,但有人告诉我这是可能的很少的信息,这导致我来到这里

【问题讨论】:

  • 这通常在应用程序代码中更容易做到。运行两个查询将其存储在数组中并进行某种计数数组差异。我假设你使用像 Node.js 这样的服务器端 javascript?跨度>

标签: javascript mysql database pymysql


【解决方案1】:

假设您还有一个user 表,您可以通过交叉连接userrecipe_ingredients 表然后左连接user_ingredients 表来实现此目的,例如:

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 表,则可以将
FROM users u 替换为FROM (SELECT DISTINCT user_id FROM user_ingredients) u
DB Fiddle

【讨论】:

  • 非常感谢,我遇到了类似的情况,但在案例陈述之后我一直不知道该怎么做。
猜你喜欢
  • 2012-06-21
  • 1970-01-01
  • 2013-03-03
  • 2011-10-08
  • 2017-03-03
  • 1970-01-01
  • 1970-01-01
  • 2010-12-27
  • 1970-01-01
相关资源
最近更新 更多