【发布时间】:2013-04-02 18:37:09
【问题描述】:
PostgreSQL:Windows 机器上的 v9.2。
更新:服务器上postgres的版本是9.0,我机器上的版本是9.2.1。
我正在尝试使用以下查询来更新我创建的表。
WITH
nei_nox AS (SELECT fips, sum(total_emissions) AS x FROM nei_data WHERE
pollutant_name ILIKE '%nitrogen%' GROUP BY fips),
nei_sox AS (SELECT fips, sum(total_emissions) AS x FROM nei_data WHERE
pollutant_name ILIKE '%sulfur%' GROUP BY fips),
nei_co AS (SELECT fips, sum(total_emissions) AS x FROM nei_data WHERE
pollutant_name ILIKE '%monoxide%' GROUP BY fips),
nei_voc AS (SELECT fips, sum(total_emissions) AS x FROM nei_data WHERE
pollutant_name ILIKE '%PM10%' GROUP BY fips),
nei_nh3 AS (SELECT fips, sum(total_emissions) AS x FROM nei_data WHERE
pollutant_name ILIKE '%PM2.5%' GROUP BY fips),
nei_pm10 AS (SELECT fips, sum(total_emissions) AS x FROM nei_data WHERE
pollutant_name ILIKE '%volatile%' GROUP BY fips),
nei_pm25 AS (SELECT fips, sum(total_emissions) AS x FROM nei_data WHERE
pollutant_name ILIKE '%ammonia%' GROUP BY fips)
-- INSERT INTO nei_data_by_county
(
SELECT dat.fips, nei_nox.x as "nox",
nei_sox.x as "sox",
nei_co.x as "co",
nei_voc.x as "voc",
nei_nh3.x as "nh3",
nei_pm10.x as "pm10",
nei_pm25.x as "pm25"
FROM bts2dat_55.cg_data dat
LEFT OUTER JOIN nei_nox ON dat.fips = nei_nox.fips
LEFT OUTER JOIN nei_sox ON dat.fips = nei_sox.fips
LEFT OUTER JOIN nei_co ON dat.fips = nei_co.fips
LEFT OUTER JOIN nei_voc ON dat.fips = nei_voc.fips
LEFT OUTER JOIN nei_nh3 ON dat.fips = nei_nh3.fips
LEFT OUTER JOIN nei_pm10 ON dat.fips = nei_pm10.fips
LEFT OUTER JOIN nei_pm25 ON dat.fips = nei_pm25.fips
);
当我在 pgAdmin 中运行查询时,数据按预期返回。但是,当我取消注释 --INSERT INTO nei_data_by_county 时,我收到以下错误:
ERROR: syntax error at or near "INSERT"
LINE 33: INSERT INTO nei_data_by_county
^
我从the documentation 得知,您可以同时使用WITH 语句和INSERT 语句,但我无法让此查询正常运行。
其他人遇到过这个问题吗?
【问题讨论】:
-
SELECT 语句周围的括号是不必要的,但它仍然应该只适用于 PostgreSQL 9.2。
-
显示的查询看起来不错,但是 WITH 在第 1 行,INSERT 在第 17 行,但错误告诉它在第 33 行。这不是很奇怪吗?
-
看来我正在使用的服务器实际上是postgres v9.0。 @ErwinBrandstetter,我如何确认“insert”语句与 v9.0 中的“with”语句不兼容?
-
@DanielVérité,行号已关闭,因为上面显示的查询上方有一个表定义。我已验证该表已正确创建。
-
好的。 9.0 不支持 INSERT 之前的 WITH。 Doc excerpt:WITH 提供了一种编写子查询以用于更大的 SELECT 查询的方法。在 9.1 中,这变成了:WITH 提供了一种编写辅助语句以用于更大查询的方法
标签: sql postgresql common-table-expression postgresql-9.2 postgresql-9.0