當我使用MySQL時,以下查詢運行乾淨。關於MySQL和PostgreSQL中的子查詢
SELECT 1 as num1, (select(num1 + 1)) as num2
但PostgreSQL返回錯誤。
ERROR: column "num1" does not exist
爲什麼它的反應不同?
當我使用MySQL時,以下查詢運行乾淨。關於MySQL和PostgreSQL中的子查詢
SELECT 1 as num1, (select(num1 + 1)) as num2
但PostgreSQL返回錯誤。
ERROR: column "num1" does not exist
爲什麼它的反應不同?
,你應該使用PostgreSQL語法,因爲PGSQL不支持子查詢這樣一來,試試這個
WITH tblcontent AS (SELECT 1 as num1)
SELECT num1, num1 + 1 AS num2 from tblcontent
謝謝,這對我來說是完美的! @girish – naohide
我找不到任何好的源代碼,但我確定該標準不需要投影列的別名在相關子查詢中可見。我只是在SQL Server和Oracle中嘗試過,他們兩個似乎都同意PostgreSQL,拒絕在相關的子查詢中使用x
,而不管它位於外部選擇的哪一個子句。
它類似於MySQL的是如何讓下面的查詢:
SELECT a + 1 x
FROM t
ORDER BY x + 1
但SQL Server和Postgres沒有。關於在各個子句中使用別名,MySQL似乎比標準要求更寬鬆。
是啊;那是因爲如果在其他任何事情之後進行評估,選擇。但爲什麼不讓'select 1作爲num1,num1 + 1作爲num2' –
的問題不應該是爲什麼Postgres的不支持這種語法,但爲什麼MySQL的一樣。在大多數RDBMS中,只有在執行查詢後才解析別名,因此不能在聲明它們的查詢中使用它們。例如,更常見的用例 - 不能在聲明它的查詢/表格元素的where
子句中使用列別名。解決此
一種方法是使用子查詢:
SELECT num1, num1 + 1 AS num2
FROM (SELECT 1 AS num1) t
MySQL不允許在WHERE中使用別名。 – Ishamael
拿什麼'不work'? – Jens
對不起,我的意思是SQL無法在PostgreSQL中運行 – naohide
任何錯誤消息? – Jens