Postgresql

可以有條件地返回“選擇”子查詢嗎?

  • August 24, 2019

僅當條件匹配時,Postgres 是否可以返回列(來自子查詢)?

詢問:

SELECT
 (SELECT NOW()) AS FIRST,

 (SELECT NOW()) AS SECOND

輸出:

| first      | second      |
|:-----------|------------:|
| timestamp  | timestamp   |

我想要一些類似的東西:(虛擬碼)

IF (variable =! 'something') {
 SELECT FIRST, SECOND
} ELSE {
SELECT FIRST
}
| first      |
|:-----------|
| timestamp  |

一般來說沒有。關係(表或查詢結果)由標題和一組元組組成。一旦聲明了標頭,所有元組都必須符合該聲明。也就是說,null 是所有類型的底部,因此您可以使用它來代替值:

SELECT FIRST, CASE WHEN variable <> 'something' then SECOND else NULL END

NULL 是 case 的預設值,因此可以縮短為:

SELECT FIRST, CASE WHEN variable <> 'something' then SECOND END

不,不可能。在開始執行查詢之前,數據庫必須知道查詢的列數——本質上是在它被解析和分析之後。-沒有名字的馬

語句輸出結構必須是確定性的。所以你想要的目標不是相關的。我認為有一些全球性的任務,你決定通過描述的技巧來解決它。這個解決方案可能是錯誤的。我建議您制定整個任務,而不是選擇解決它的方法。-秋名

引用自:https://dba.stackexchange.com/questions/246024