MYSQL 在左连接条件中使用 OR 吗?

标签 mysql

我不完全确定我正在尝试做的事情是否可行。在左连接的情况下可以使用 OR 吗?我从我的用户表开始,然后它可以从 week_meal 到膳食(将他们不拥有的膳食添加到他们的每周膳食计划)或直接到膳食(他们拥有的膳食)。该部分似乎正在工作,但是当我在选择中包含 mta.meal_to_add_id 时,它错误地拉入了不符合 LEFT JOIN 中的标准的餐点到 meal_to_add。

摆弄结构:http://sqlfiddle.com/#!2/7bd9c4

  SELECT DISTINCT m.*, o.username as owner,i.*, mta.meal_to_add_id, follow_id
    FROM webusers wu
LEFT JOIN week_meal wm ON wu.id=wm.user_id
LEFT JOIN meal m ON (wu.id=m.user_id OR wm.meal_id=m.meal_id)
LEFT JOIN webusers o ON m.user_id=o.id
LEFT JOIN meal_to_add mta ON 
    ((wm.user_id = mta.user_id AND wm.meal_id=mta.meal_id) 
     OR (m.user_id=mta.user_id AND m.meal_id=mta.meal_id))
     JOIN ingredient i ON m.meal_id = i.meal_id
LEFT JOIN follow f ON
 m.user_id!=wu.id AND
m.user_id=f.followed_webuser_id
 AND wu.id=f.followee_webuser_id
   WHERE wu.id=5 AND m.meal_id in (138)
ORDER BY m.meal, i.ingredient_id

输出:应该像这样,仅包含 mta.meal_to_add_id 字段,在本例中,所有行都应为 NULL (18)

Sample Results

最佳答案

回答问题的第一部分:是的,您可以在 LEFT JOIN 中使用 OR 子句。

至于第二部分,简单来说,这就是查询的意思:

将“周餐”加入到用户 ID 上的用户中。将餐食加入到同一用户 ID 上的用户将餐食加入到该餐食 ID 上的用户。现在假设我们有一些匹配的餐食/用户组合,其中一些餐食行与用户匹配,其他餐食行与餐食 ID 匹配。

接下来,再次与网络用户一起吃饭。现在我们的餐食行可能与两组用户匹配。因此,当 mta 尝试匹配餐食时,它会匹配两组可能的餐食/用户组合。

在这种情况下,我的做法是将查询分解为两个查询,并将中间结果放入临时表中(使用 MEMORY 引擎),然后从中进行选择。

关于MYSQL 在左连接条件中使用 OR 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25584863/

相关文章:

mysql - 将查询从 NOT IN 更改为 NOt EXISTS

mysql - ORDER BY mysql 逗号分隔值

mysql - SQL如何将相似的记录合并到同一个表的单行中?

mysql - 连接两个表,其中一个表具有特定值

php - 在帐户页面(登录系统)获取自动增量值

mysql - Pluck 查询正在运行,而 select 在 JOINS rails 查询中不起作用

php - 单击 'exit' 按钮后如何删除 mysql 数据库中保存的行

php - 何时将图像存储在数据库(mySQL)中,何时不存储? (将图像链接到数据库中的项目)

Mysql选择复制列到另一个,id没有连续

Mysql选择上周用户每天的帖子总数