【问题标题】:MS Access 2013 SQL Query LEFT JOINMS Access 2013 SQL 查询左连接
【发布时间】:2015-09-01 15:37:26
【问题描述】:
FROM (((Project 
INNER JOIN MDS ON Project.PID=MDS.PID) 
INNER JOIN PLocation ON Project.PID = PLocation.PID) 
INNER JOIN Site ON PLocation.ACode = Site.ACode) AS [Prim] 
LEFT JOIN ((Procurement INNER JOIN MagicT ON Procurement.PRNum = MagicT.PRNum) 
INNER JOIN DO ON DO.DoNum = MagicT.DONum) AS [Prim2] ON Prim.PRNum = Prim2.PRNum

大家好。所以上面的from语句给了我一个错误:

from 子句中的语法错误

有趣的是,当我将 LEFT JOININNER JOIN 设置为运行良好时,它运行良好,但遗憾的是这不是我想要的。我读到我必须重命名内部查询并使用它们的新名称加入它们,但不幸的是我认为我做得不对。

【问题讨论】:

  • 相信你和mysql没什么关系。然后请删除标签
  • 在 Access 中,左连接 = 左外连接。无论哪种情况,它都不起作用。
  • 表别名属于表名之后,而不是连接条件之后。作为 PRIM 和 as PRIM2 似乎位于不正确的位置。另外...似乎您正在尝试对两个表的关联进行别名...再次不正确的语法...如果您需要将表分组在一起,请使用内联视图INNER JOIN (SELECT * from table left join other) as Prim
  • 我的建议是一次添加每个加入。如果它运行,添加下一个。继续这样做直到它出错,看看你是否能解释错误发生的原因。如果不了解表结构或数据类型,很难判断。

标签: ms-access join


【解决方案1】:

也许这...使用两个内联视图。但是您应该能够在 Access 中仅使用 () 来执行此操作...但是,如果您在每个 Prim/prim2 表中都有相同的命名列,这将出现错误,您可能必须拼出每个列名在内联视图中需要。

FROM (SELECT * FROM Project 
INNER JOIN MDS ON Project.PID=MDS.PID
INNER JOIN PLocation ON Project.PID = PLocation.PID
INNER JOIN Site ON PLocation.ACode = Site.ACode) PRIM
LEFT JOIN (SELECT * from Procurement 
           INNER JOIN MagicT ON Procurement.PRNum = MagicT.PRNum
           INNER JOIN DO ON DO.DoNum = MagicT.DONum) PRIM2
  ON Prim.PRNUM = Prim2.PRNUM

---也许......在访问中()将处理外连接,但我不知道PRNUM来自(项目,mds,位置,站点)中的哪个表,所以项目是一个猜测。 ..

FROM Project 
INNER JOIN MDS ON Project.PID=MDS.PID
INNER JOIN PLocation ON Project.PID = PLocation.PID
INNER JOIN Site ON PLocation.ACode = Site.ACode
LEFT JOIN (SELECT * from Procurement 
           INNER JOIN MagicT ON Procurement.PRNum = MagicT.PRNum
           INNER JOIN DO ON DO.DoNum = MagicT.DONum) PRIM2
  ON Project.PRNUM = Prim2.PRNUM

【讨论】:

    【解决方案2】:

    你基本上有

    FROM Subquery1 LEFT JOIN Subquery2
    

    但您的子查询中没有 SELECT。
    我认为应该是:

    FROM 
    (SELECT Prim.PRNum FROM
        (((Project 
        INNER JOIN MDS ON Project.PID=MDS.PID) 
        INNER JOIN PLocation ON Project.PID = PLocation.PID) 
        INNER JOIN Site ON PLocation.ACode = Site.ACode) 
    AS [Prim]) 
    
    LEFT JOIN 
    
    (SELECT Prim2.PRNum FROM
        ((Procurement INNER JOIN MagicT ON Procurement.PRNum = MagicT.PRNum) 
        INNER JOIN DO ON DO.DoNum = MagicT.DONum) 
    AS [Prim2])
    
    ON Prim.PRNum = Prim2.PRNum
    

    (编辑:有点太晚了......)

    【讨论】:

      【解决方案3】:

      我在这里还发现了一个问题,即在 Access 中,您可以在内部联接中嵌套左联接或右联接,但不能在左联接或右联接中使用内部联接。重写查询以在内部联接中不包含这些联接已解决了该问题。

      感谢大家的帮助。

      【讨论】:

        猜你喜欢
        • 2013-07-31
        • 2016-01-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多