【问题标题】:JOIN Issues With SQLSQL 的 JOIN 问题
【发布时间】:2014-12-13 17:18:47
【问题描述】:

我收到错误消息:“子句中的语法错误”

我该如何解决这个问题?这是我的 SQL:

SELECT INVOICE.INV_NUMBER,
       PRODUCT_revised.P_DESCRIPT, 
       CUSTOMER.CUS_CODE, 
       CUSTOMER.CUS_LNAME, 
       CUSTOMER.CUS_FNAME, 
       LINE.LINE_UNITS AS [Purchase_Quantity], 
       LINE.LINE_PRICE AS [Unit_Price], 
       (Purchase_Quantity * Unit_Price) AS [Line Total]
FROM INVOICE, PRODUCT_revised, CUSTOMER, LINE
FULL JOIN INVOICE
     ON INVOICE.INV_NUMBER = LINE.INV_NUMBER;

【问题讨论】:

  • 请问您的架构在哪里?
  • FULL JOIN 在 Access SQL 中不受支持。如果您使用 Access 的查询设计器设置联接,它可以帮助您避免尝试使用 Access 不支持的功能。

标签: sql ms-access join


【解决方案1】:

您的 FROM 子句甚至不是大致正确的。您正在尝试混合“旧”和“新”JOIN。选择一种格式,并坚持下去。可能最好使用专门要求 INNER JOIN 用于 INNER JOINS 的较新格式。在下面的示例中,我假设 INNER JOIN 是您想要的类型,但取决于您真正尝试提取的内容,情况可能并非如此。

此外,您缺少大多数 JOIN 的 JOIN 条件,因此此查询会吐出大量不需要的记录。

为了正确编写一个包含同一个表两次的 JOIN(这很好,并且是常见的做法),您需要为这些表设置别名,以便在尚未提供的 JOIN 条件下区分它们。

最后,很少需要 FULL OUTER JOIN。即使在这种情况下是需要的,MS Access 也不支持它。

所以,你最终的 FROM 子句将如下所示:

FROM ((((Invoice AS INV1 INNER JOIN Product_Revisied ON <JOIN Conditions Here>)
   INNER JOIN Customer ON <JOIN Conditions Here>)
   INNER JOIN Line ON <JOIN Conditions Here>)
   INNER-OR-OUTER JOIN Invoice AS INV2 ON <JOIN Conditions Here>)

【讨论】:

    猜你喜欢
    • 2011-03-25
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多