[英]Converting MS Access Queries to PostgreSQL queries (format())
[英]How do I convert MS Access queries to PostgreSql queries?
我在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 (((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,但是在Oracle中,您需要将方括号更改为双引号。 此外,它可能会抱怨,因为您是根据结果集中未包含的列进行分组的。 您可能需要更改查询以返回所有分组依据字段,例如:
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;
分享并享受。
您所有的列都命名相同吗?
我前面没有postgresql数据库,但是广义的sql查询看起来与此类似。 请注意,我删除了内部联接周围的()和访问使用的[]。 此外,您正在按查询的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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.