2

我在 Access 中有这个 SQL,但它给了我一个错误。我试过移动括号,但没有解决问题。

SELECT
    a.title, a.id, a.name, l.user, l.time 
FROM
    Reports a
INNER JOIN (
    AuditLog AS l ON a.id = l.id
INNER JOIN (
(
    SELECT min(time) Mintime, id
    from AuditLog
    GROUP BY id
) AS t )
  ON l.id = t.id
  AND l.time = t.mintime )
WHERE
    a.NAME LIKE 'something*'
    AND a.ACTIVE='Y'

如何解决我遇到的语法错误?

4

2 回答 2

3

您的这部分查询肯定会产生问题:

SELECT min(time) Mintime, id

如果您打算将字段表达式别名min(time)Mintime,则必须使用AS关键字。您不需要AS表别名,但您需要字段别名:

SELECT min(time) AS Mintime, id

它似乎time是您AuditLog表中的一个字段。在这种情况下,将其名称括在方括号中以将其与Time()函数区分开来:

SELECT min([time]) AS Mintime, id

至于括号,如果可能,您应该使用 Access 的查询设计器来设置您的联接。它将保证您的查询包含数据库引擎要求的括号并正确定位它们。

如果这不是一个选项,试试这个未经测试的版本:

SELECT
    a.title, a.id, a.name, l.user, l.time 
FROM
    (Reports a
    INNER JOIN AuditLog AS l
    ON a.id = l.id)
    INNER JOIN
        (
            SELECT min([time]) AS Mintime, id
            from AuditLog
            GROUP BY id
        ) AS t
    ON
            l.id = t.id
        AND l.time = t.mintime
WHERE
        a.NAME LIKE 'something*'
    AND a.ACTIVE='Y'
于 2012-12-05T23:02:59.087 回答
2

除非你or有条件,否则你不应该需要括号。在 Access 中试试这个,看看它是否有效:

SELECT
    a.title, a.id, a.name, l.user, l.time 
FROM
    (Reports a INNER JOIN AuditLog AS l ON a.id = l.id) INNER JOIN
    (
        SELECT min(time) as Mintime, id
        from AuditLog
        GROUP BY id
    ) AS t ON l.id = t.id AND l.time = t.mintime
WHERE
    a.NAME LIKE 'something*'
    AND a.ACTIVE='Y'

不过,我还没有在 Access 中进行子查询,所以看看它是否在子查询的左括号旁边报告错误会很有趣。

于 2012-12-05T22:49:51.923 回答