访问“不支持加入”移动左加入

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 JOINs 开始,通常所有剩余的连接也应该是LEFT JOINs。

【讨论】:

【参考方案2】:

由于您的主要焦点表是 Recipe_Ingredients,请考虑从 FROM 中的此表开始,然后是 JOIN 其他父表,甚至嵌套 RecipesRecipe_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 个表时出现“不支持加入”错误

怎样在Chrome浏览器加入迅雷支持?

Transactionscope .net 核心 2

Oracle 优化——奇怪的执行计划左加入一个不相关的子查询

每当我移动到不同的选项卡屏幕时,它都会显示错误“不支持访问路由对象的状态属性”

在 GROUP BY 后左加入?