我在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'
如何解决我遇到的语法错误?
答案 0 :(得分: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中没有完成子查询,所以看看它是否在子查询的左括号旁边报告错误会很有趣。
答案 1 :(得分:2)
这段查询肯定会产生问题:
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'查询设计器来设置连接。它将保证您的查询包含db引擎所需的括号,并将正确定位它们。
如果这不是一个选项,请试试这个未经测试的版本:
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'