我不完全确定我正在尝试做的事情是否可行。在左连接的情况下可以使用 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)
最佳答案
回答问题的第一部分:是的,您可以在 LEFT JOIN
中使用 OR
子句。
至于第二部分,简单来说,这就是查询的意思:
将“周餐”加入到用户 ID 上的用户中。将餐食加入到同一用户 ID 上的用户或将餐食加入到该餐食 ID 上的用户。现在假设我们有一些匹配的餐食/用户组合,其中一些餐食行与用户匹配,其他餐食行与餐食 ID 匹配。
接下来,再次与网络用户一起吃饭。现在我们的餐食行可能与两组用户匹配。因此,当 mta 尝试匹配餐食时,它会匹配两组可能的餐食/用户组合。
在这种情况下,我的做法是将查询分解为两个查询,并将中间结果放入临时表中(使用 MEMORY 引擎),然后从中进行选择。
关于MYSQL 在左连接条件中使用 OR 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25584863/