繁体   English   中英

MYSQL在“左联接”条件下使用OR?

[英]MYSQL Use OR in Left Join condition?

我不确定我要做什么。 您可以在左联接的情况下使用OR吗? 我从用户表开始,然后可以从week_meal到餐(将他们不拥有的餐添加到他们的每周进餐计划中)或直接进餐(他们拥有的餐)。 该部分似乎正常工作,但是当我在选择中包含mta.meal_to_add_id时,它不正确地将不符合LEFT JOIN中条件的餐点添加到餐饭to_add_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)

样品结果

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

至于第二部分,用简单的话来说,这就是查询似乎要说的:

在用户ID上为用户加入“周餐”。 将餐点添加到具有相同用户ID的用户, 将餐点添加到用户ID的用户。 现在假设我们有一些匹配的进餐/用户组合,其中一些进餐行在用户上匹配,其他进餐行在进餐ID上匹配。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM