访问“不支持加入”移动左加入
Posted
技术标签:
【中文标题】访问“不支持加入”移动左加入【英文标题】:Access 'Join not supported' Moving LEFT Join 【发布时间】:2018-03-15 20:00:57 【问题描述】:我在这里做了一些研究,我知道在 Access 中嵌套连接会导致问题。
我认为这是第一个示例中的问题。
SELECT
Recipe_Classes.RecipeClassDescription,
Recipes.RecipeTitle,
Recipes.Preparation,
Ingredients.IngredientName,
Recipe_Ingredients.RecipeSeqNo,
Recipe_Ingredients.Amount,
Measurements.MeasurementDescription
FROM (((
Recipe_Classes
LEFT JOIN Recipes
ON Recipe_Classes.RecipeClassID = Recipes.RecipeClassID)
INNER JOIN Recipe_Ingredients
ON Recipes.RecipeID = Recipe_Ingredients.RecipeID)
INNER JOIN Ingredients
ON Ingredients.IngredientID = Recipe_Ingredients.IngredientID)
INNER JOIN Measurements
ON Measurements.MeasureAmountID = Recipe_Ingredients.MeasureAmountID
ORDER BY RecipeTitle, RecipeSeqNo;
我尝试删除嵌套并在此示例中创建了右连接
SELECT
Recipe_Classes.RecipeClassDescription,
Recipes.RecipeTitle,
Recipes.Preparation,
Ingredients.IngredientName,
Recipe_Ingredients.RecipeSeqNo,
Recipe_Ingredients.Amount,
Measurements.MeasurementDescription
FROM (((
Ingredients
INNER JOIN Recipe_Ingredients
ON Ingredeints.IngredientID = Recipe_Ingredients.IngredientID)
INNER JOIN Measurements
ON Measurements.MeasureAmountID = Recipe_Ingredients.MeasureAmountID)
INNER JOIN Recipes
ON Recipes.RecipeID = Recipe_Ingredients.RecipeID)
RIGHT JOIN Recipe_Classes
ON Recipe_Classes.RecipeClassID = Recipes.RecipeClassID
ORDER BY RecipeTitle, RecipeSeqNo;
谁能指出我正确的方向?
【问题讨论】:
见meta.***.com/questions/333952/… 【参考方案1】:问题可能是不需要的left join
。试试这个from
子句:
SELECT Recipe_Classes.RecipeClassDescription,
Recipes.RecipeTitle,
Recipes.Preparation,
Ingredients.IngredientName,
Recipe_Ingredients.RecipeSeqNo,
Recipe_Ingredients.Amount,
Measurements.MeasurementDescription
FROM (((Recipes LEFT JOIN
Recipe_Classes
ON Recipe_Classes.RecipeClassID = Recipes.RecipeClassID
) LEFT JOIN
Recipe_Ingredients
ON Recipes.RecipeID = Recipe_Ingredients.RecipeID
) LEFT JOIN
Ingredients
ON Ingredients.IngredientID = Recipe_Ingredients.IngredientID
) LEFT JOIN Measurements
ON Measurements.MeasureAmountID = Recipe_Ingredients.MeasureAmountID
ORDER BY RecipeTitle, RecipeSeqNo;
一旦你从LEFT JOIN
s 开始,通常所有剩余的连接也应该是LEFT JOIN
s。
【讨论】:
【参考方案2】:由于您的主要焦点表是 Recipe_Ingredients,请考虑从 FROM
中的此表开始,然后是 JOIN
其他父表,甚至嵌套 Recipes 和Recipe_Classes 对:
SELECT
c.RecipeClassDescription,
r.RecipeTitle,
r.Preparation,
i.IngredientName,
ri.RecipeSeqNo,
ri.Amount,
m.MeasurementDescription
FROM
((Recipe_Ingredients ri
INNER JOIN (Recipes r
RIGHT JOIN Recipe_Classes c
ON c.RecipeClassID = r.RecipeClassID)
ON r.RecipeID = ri.RecipeID)
INNER JOIN Ingredients i
ON i.IngredientID = ri.IngredientID)
INNER JOIN Measurements m
ON m.MeasureAmountID = ri.MeasureAmountID
ORDER BY r.RecipeTitle, ri.RecipeSeqNo;
当然,这是未经数据测试的。由于 Access 的JOIN
要求,如括号,通常建议新用户使用 MS Access 的 GUI 查询设计构建复杂的查询,然后根据需要修改生成的 SQL。
【讨论】:
以上是关于访问“不支持加入”移动左加入的主要内容,如果未能解决你的问题,请参考以下文章
在 SQLite 数据库中加入 3 个表时出现“不支持加入”错误
Oracle 优化——奇怪的执行计划左加入一个不相关的子查询