我遇到查询问题,下面在PostgreSQL中运行 但是永不结束。你有什么建议吗?关于永不结束的PostgreSQL查询
WITH tmp1 AS (
SELECT istante, produzione,
CAST (CAST (produzione AS FLOAT)/12000 AS NUMERIC(6,2)) AS proden,
CAST (CAST (consumo AS FLOAT)/12000 AS NUMERIC(6,2)) AS consen
FROM ftv1
), tmp2 AS (
SELECT LEAST(proden, consen) AS aconsen
FROM tmp1
)
SELECT tmp1.istante, tmp1.proden, tmp1.consen,
(tmp1.consen - tmp2.aconsen) AS enconsen
FROM tmp1, tmp2;
你的表有多少行,你在等待多久?*永不结束*? – yanman1234
选择FROM tmp1,tmp2语句作为笛卡尔连接。因为它没有完成。请给出正确的连接条件 –
没有任何定义“ftv1”和“tmp2”的连接条件的WHERE子句,所以实际上它是一个交叉连接,它将第一个表中的所有行与第二个表中的所有行进行组合。如果第一个表包含例如10.000行,第二个表包含20.000行,那么交叉连接产生10000 x 20000 = 200000000行 - 它需要一些时间(可能需要十几天,甚至几个星期,但最有可能直到磁盘空间耗尽,因为RDBMS将所有生成的行保存在临时表中的磁盘上)。 – krokodilko