我遇到查詢問題,下面在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