将 SQl 查询转换为 MS Access
Convert SQl query to MS Access
SELECT *
FROM data WHERE (object,TCH_Traffic) IN
( SELECT object, MAX(TCH_Traffic)
FROM data
GROUP BY object
)
能否使用 MS Access 数据库将上述查询修改为 运行。
我在 MS access 2010 db 中收到 "revise the select statement of " 提示错误。
只需使用相关子查询:
SELECT *
FROM data
WHERE TCH_Traffic = (SELECT MAX(d2.TCH_Traffic)
FROM data as d2
WHERE d2.object = data.object
);
MS Access 的默认 Jet/ACE SQL 引擎可以使用 IN
子句在 WHERE
条件下处理子查询。但是,子查询必须 return 一列值。考虑以下调整:
SELECT *
FROM data WHERE (object) IN
( SELECT object
FROM data
GROUP BY object
HAVING TCH_Traffic = MAX(TCH_Traffic)
);
但是,您可以简单地将派生的 table 与 INNER JOIN
一起使用,并避免使用 WHERE
子句子查询。此外,相同的派生 table 查询可以保存为 MS Access 中的存储查询对象,并在连接子句中明确引用:
SELECT *
FROM data
INNER JOIN
( SELECT object, MAX(TCH_Traffic) As maxTraffic
FROM data
GROUP BY object
) As dT
ON data.object = dT.object
AND data.TCH_Traffic = dt.maxTraffic
SELECT *
FROM data WHERE (object,TCH_Traffic) IN
( SELECT object, MAX(TCH_Traffic)
FROM data
GROUP BY object
)
能否使用 MS Access 数据库将上述查询修改为 运行。 我在 MS access 2010 db 中收到 "revise the select statement of " 提示错误。
只需使用相关子查询:
SELECT *
FROM data
WHERE TCH_Traffic = (SELECT MAX(d2.TCH_Traffic)
FROM data as d2
WHERE d2.object = data.object
);
MS Access 的默认 Jet/ACE SQL 引擎可以使用 IN
子句在 WHERE
条件下处理子查询。但是,子查询必须 return 一列值。考虑以下调整:
SELECT *
FROM data WHERE (object) IN
( SELECT object
FROM data
GROUP BY object
HAVING TCH_Traffic = MAX(TCH_Traffic)
);
但是,您可以简单地将派生的 table 与 INNER JOIN
一起使用,并避免使用 WHERE
子句子查询。此外,相同的派生 table 查询可以保存为 MS Access 中的存储查询对象,并在连接子句中明确引用:
SELECT *
FROM data
INNER JOIN
( SELECT object, MAX(TCH_Traffic) As maxTraffic
FROM data
GROUP BY object
) As dT
ON data.object = dT.object
AND data.TCH_Traffic = dt.maxTraffic