如何将MS Access查询转换为PostgreSql查询?
我将MS Access数据库中的数据传输到PostgreSQL数据库中。我想在PostgreSQL中复制我在MS Access中所做的查询。在我的一个表的SQL视图中,我有:如何将MS Access查询转换为PostgreSql查询?,sql,database,ms-access,postgresql,Sql,Database,Ms Access,Postgresql,我将MS Access数据库中的数据传输到PostgreSQL数据库中。我想在PostgreSQL中复制我在MS Access中所做的查询。在我的一个表的SQL视图中,我有: SELECT GENERAL_CAUSE_NFD.[Cause Class], DFS_FIRE_ARCHIVE.FIRE_YEAR AS [Year], OBJECTIVES_NFD.[Response Category], Count(DFS_FIRE_ARCHIVE.REGION) AS Total FROM (((
SELECT GENERAL_CAUSE_NFD.[Cause Class], DFS_FIRE_ARCHIVE.FIRE_YEAR AS [Year], OBJECTIVES_NFD.[Response Category], Count(DFS_FIRE_ARCHIVE.REGION) AS Total
FROM (((DFS_FIRE_ARCHIVE INNER JOIN GENERAL_CAUSE_ORDER ON DFS_FIRE_ARCHIVE.GENERAL_CAUSE = GENERAL_CAUSE_ORDER.GENERAL_CAUSE) INNER JOIN OBJECTIVE_ORDER ON DFS_FIRE_ARCHIVE.OBJECTIVE = OBJECTIVE_ORDER.OBJECTIVE) INNER JOIN OBJECTIVES_NFD ON OBJECTIVE_ORDER.OBJECTIVE = OBJECTIVES_NFD.OBJECTIVE) INNER JOIN GENERAL_CAUSE_NFD ON GENERAL_CAUSE_ORDER.GENERAL_CAUSE = GENERAL_CAUSE_NFD.GENERAL_CAUSE
GROUP BY GENERAL_CAUSE_NFD.[Cause Class], DFS_FIRE_ARCHIVE.FIRE_YEAR, OBJECTIVES_NFD.[Response Category], DFS_FIRE_ARCHIVE.GENERAL_CAUSE, DFS_FIRE_ARCHIVE.OBJECTIVE, GENERAL_CAUSE_ORDER.ORDER, OBJECTIVE_ORDER.ORDER, DFS_FIRE_ARCHIVE.FIRE_MGT_ZONE, DFS_FIRE_ARCHIVE.FIRE_TYPE
HAVING (((DFS_FIRE_ARCHIVE.FIRE_YEAR)=2009) AND ((DFS_FIRE_ARCHIVE.FIRE_MGT_ZONE)="INT") AND ((DFS_FIRE_ARCHIVE.FIRE_TYPE)="IFR"))
ORDER BY GENERAL_CAUSE_ORDER.ORDER, OBJECTIVE_ORDER.ORDER, DFS_FIRE_ARCHIVE.OBJECTIVE;
问题是,当我尝试在PostgreSQL中执行此查询时,我收到语法错误。您的列的名称是否都相同 我面前没有postgresql数据库,但通用sql查询看起来与此类似。注意,我删除了内部联接周围的()和access使用的[]。此外,您正在按查询的SELECT子句中没有的字段进行分组-您确定这是您要做的吗
SELECT
GENERAL_CAUSE_NFD."Cause Class",
DFS_FIRE_ARCHIVE.FIRE_YEAR AS Year,
OBJECTIVES_NFD."Response Category",
Count(DFS_FIRE_ARCHIVE.REGION) AS Total
FROM
DFS_FIRE_ARCHIVE INNER JOIN GENERAL_CAUSE_ORDER
ON DFS_FIRE_ARCHIVE.GENERAL_CAUSE = GENERAL_CAUSE_ORDER.GENERAL_CAUSE
INNER JOIN OBJECTIVE_ORDER
ON DFS_FIRE_ARCHIVE.OBJECTIVE = OBJECTIVE_ORDER.OBJECTIVE
INNER JOIN OBJECTIVES_NFD
ON OBJECTIVE_ORDER.OBJECTIVE = OBJECTIVES_NFD.OBJECTIVE
INNER JOIN GENERAL_CAUSE_NFD
ON GENERAL_CAUSE_ORDER.GENERAL_CAUSE = GENERAL_CAUSE_NFD.GENERAL_CAUSE
GROUP BY GENERAL_CAUSE_NFD."Cause Class",
DFS_FIRE_ARCHIVE.FIRE_YEAR,
OBJECTIVES_NFD."Response Category",
DFS_FIRE_ARCHIVE.GENERAL_CAUSE,
DFS_FIRE_ARCHIVE.OBJECTIVE,
GENERAL_CAUSE_ORDER.ORDER,
OBJECTIVE_ORDER.ORDER,
DFS_FIRE_ARCHIVE.FIRE_MGT_ZONE,
DFS_FIRE_ARCHIVE.FIRE_TYPE
HAVING
DFS_FIRE_ARCHIVE.FIRE_YEAR=2009
AND DFS_FIRE_ARCHIVE.FIRE_MGT_ZONE='INT'
AND DFS_FIRE_ARCHIVE.FIRE_TYPE='IFR'
ORDER BY GENERAL_CAUSE_ORDER."ORDER",
OBJECTIVE_ORDER."ORDER",
DFS_FIRE_ARCHIVE.OBJECTIVE;
不确定PostgreSQL,但在Oracle中,您可以将方括号更改为双引号。此外,它可能会抱怨,因为您是基于不在结果集中的列进行分组的。您可能需要更改查询以返回所有group by字段,如:
SELECT GENERAL_CAUSE_NFD."Cause Class",
DFS_FIRE_ARCHIVE.FIRE_YEAR AS "Year",
OBJECTIVES_NFD."Response Category",
DFS_FIRE_ARCHIVE.GENERAL_CAUSE,
DFS_FIRE_ARCHIVE.OBJECTIVE,
GENERAL_CAUSE_ORDER.ORDER,
OBJECTIVE_ORDER.ORDER,
DFS_FIRE_ARCHIVE.FIRE_MGT_ZONE,
DFS_FIRE_ARCHIVE.FIRE_TYPE,
Count(DFS_FIRE_ARCHIVE.REGION) AS "Total"
FROM (((DFS_FIRE_ARCHIVE
INNER JOIN GENERAL_CAUSE_ORDER
ON DFS_FIRE_ARCHIVE.GENERAL_CAUSE = GENERAL_CAUSE_ORDER.GENERAL_CAUSE)
INNER JOIN OBJECTIVE_ORDER
ON DFS_FIRE_ARCHIVE.OBJECTIVE = OBJECTIVE_ORDER.OBJECTIVE)
INNER JOIN OBJECTIVES_NFD
ON OBJECTIVE_ORDER.OBJECTIVE = OBJECTIVES_NFD.OBJECTIVE)
INNER JOIN GENERAL_CAUSE_NFD
ON GENERAL_CAUSE_ORDER.GENERAL_CAUSE = GENERAL_CAUSE_NFD.GENERAL_CAUSE
GROUP BY GENERAL_CAUSE_NFD."Cause Class",
DFS_FIRE_ARCHIVE.FIRE_YEAR,
OBJECTIVES_NFD."Response Category",
DFS_FIRE_ARCHIVE.GENERAL_CAUSE,
DFS_FIRE_ARCHIVE.OBJECTIVE,
GENERAL_CAUSE_ORDER.ORDER,
OBJECTIVE_ORDER.ORDER,
DFS_FIRE_ARCHIVE.FIRE_MGT_ZONE,
DFS_FIRE_ARCHIVE.FIRE_TYPE
HAVING (((DFS_FIRE_ARCHIVE.FIRE_YEAR)=2009) AND
((DFS_FIRE_ARCHIVE.FIRE_MGT_ZONE)="INT") AND
((DFS_FIRE_ARCHIVE.FIRE_TYPE)="IFR"))
ORDER BY GENERAL_CAUSE_ORDER.ORDER,
OBJECTIVE_ORDER.ORDER,
DFS_FIRE_ARCHIVE.OBJECTIVE;
分享和享受。看起来像方括号。。。表名转移干净了吗?