将 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