2014-01-09 121 views
7

我正在將postgresql中的大表加入到其中有1行的表中。是的,我知道我可以從這個單行表中取值並將它們寫入我的查詢中,但有210列。加入1 = 1與交叉加入

所以我的問題是這樣的:我應該將單行表加入到所有使用交叉連接或使用常數連接的重複連接(1 = 1或某物)。這兩種方式中的哪一種都會變慢?

或者還有第三種更快的方法嗎?

+1

究竟是什麼問題?你需要在連接條件中擁有所有210列? –

+9

使用'交叉連接'來清楚你的意圖。否則明年你(或者有人不得不改變你的代碼)會想知道那個愚蠢的'1 = 1'應該是什麼意思。 –

+2

衡量性能要求的解決方案。 –

回答

4

1=1存在的原因是通過將字符串連接在一起(使用通常的保護措施,如參數化)來更容易地創建動態sql語句。

具有預定WHERE在它1=1子句允許被添加到SQL附加WHERE條件,而無需檢查的WHERE子句第一的存在,以及SQL引擎通常會優化出1=1所以沒有表現區別。

在任何其他情況下,1=1通常是無害的,但不是特別有用。

3

有一點需要注意的是,如果其中一個表爲空,交叉連接將導致一個空表。如果其中一個表可能爲空,而您仍然需要記錄,則可能需要1 = 1時的外部聯接(例如,左側,右側或全部)。