【问题标题】:MS Access query syntax [duplicate]MS Access 查询语法 [重复]
【发布时间】:2020-04-22 16:46:19
【问题描述】:

这是一个返回数据的 MS Access 查询:

SELECT Invoices.ID, Invoices.DateGenerated, Timesheet.ActivityDate, Timesheet.ActivityDescription, 
Timesheet.Hours, Rate.GstExcRate, Rate.GSTRate, Timesheet.Hours * Rate.GstExcRate AS BilledGSTExc, 
Timesheet.Hours * Rate.GstRate AS BilledGST
FROM 
(Invoices INNER JOIN Timesheet ON Invoices.ID = Timesheet.InvoiceID) 
INNER JOIN Rate 
ON (Timesheet.ActivityDate >= Rate.DateFrom) AND (Timesheet.ActivityDate <= Rate.DateTo);

我需要添加另一个表,所以我在其中添加另一个 INNER JOIN:

SELECT Invoices.ID, Invoices.DateGenerated, Timesheet.ActivityDate, Timesheet.ActivityDescription, 
Timesheet.Hours, Rate.GstExcRate, Rate.GSTRate, Timesheet.Hours * Rate.GstExcRate AS BilledGSTExc, 
Timesheet.Hours * Rate.GstRate AS BilledGST
FROM 
(Invoices INNER JOIN Timesheet ON Invoices.ID = Timesheet.InvoiceID) 
INNER JOIN Rate 
ON (Timesheet.ActivityDate >= Rate.DateFrom) AND (Timesheet.ActivityDate <= Rate.DateTo)
INNER JOIN Periods 
ON (Periods.ID = Invoices.PeriodID);

但我明白了

查询表达式 '(Timesheet.ActivityDate >= Rate.DateFrom) AND (Timesheet.ActivityDate

显然这里需要一些特定的 MS Access 语法。阅读我所做的意味着 INNER JOINS 需要“嵌套”,但官方文档说它是可选的。

我以各种方式重新排列它,但我无法破解它。

谁能告诉我这个语法有问题(它在我使用过的所有其他 SQL 方言中都完全有效)

【问题讨论】:

    标签: sql ms-access join


    【解决方案1】:

    访问需要多连接的括号,所以:

    SELECT 
        i.ID,  
        i.DateGenerated, 
        t.ActivityDate, 
        t.ActivityDescription, 
        t.Hours, 
        r.GstExcRate, 
        r.GSTRate, 
        t.Hours * r.GstExcRate AS BilledGSTExc, 
        t.Hours * r.GstRate AS BilledGST
    FROM 
        (
            (
                Invoices i 
                INNER JOIN Timesheet t
                    ON i.ID = t.InvoiceID
            ) 
            INNER JOIN Rate r
                ON (t.ActivityDate >= r.DateFrom) AND (t.ActivityDate <= r.DateTo)
        )
        INNER JOIN Periods p
            ON (p.ID = i.PeriodID)
    

    您可能还想使用表别名来缩短查询。

    【讨论】:

    • 这个返回JOIN操作中的语法错误。这是一个关于别名的好技巧
    • @Nick.McDermaid:我刚刚修复的一个别名有错字,现在可以用了吗?
    【解决方案2】:

    基于此确定:

    How do I join 4+ tables in Access with a combination inner/outer?

    我改成这样了:

    SELECT Invoices.ID, Invoices.DateGenerated, Timesheet.ActivityDate, Timesheet.ActivityDescription, 
    Timesheet.Hours, Rate.GstExcRate, Rate.GSTRate, Timesheet.Hours * Rate.GstExcRate AS BilledGSTExc, 
    Timesheet.Hours * Rate.GstRate AS BilledGST
    FROM 
    (
      (
        (Invoices INNER JOIN Timesheet ON Invoices.ID = Timesheet.InvoiceID) 
        INNER JOIN Rate 
        ON (Timesheet.ActivityDate >= Rate.DateFrom) AND (Timesheet.ActivityDate <= Rate.DateTo)
      )
      INNER JOIN Periods 
      ON (Periods.ID = Invoices.PeriodID)
    );
    

    哪些功能正确。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-20
      • 1970-01-01
      相关资源
      最近更新 更多