我有幾個問題,關於自我加入,任何人都可以幫忙解答一下?什麼是sef-join?
是否有嚴格的自連接格式?有sample這樣的:
SELECT a.column_name, b.column_name... FROM table1 a, table1 b WHERE a.common_field = b.common_field;
但也有樣:
SELECT a.ID, b.NAME, a.SALARY
FROM CUSTOMERS a, CUSTOMERS b
WHERE a.SALARY < b.SALARY;
不知是必要的連接(a.common_field = b.common_field)?因爲這兩種格式都是自加入的。
如何將自聯接進行優化?他們將被視爲INNER JOIN或CROSS JOIN?特別是對於第二種格式,它是自交叉連接嗎?在SQLite和PostgreSQL中,它們是以相同的方式處理的嗎?
我的問題是我想提取從一堆圖形類數據的結構和我的查詢像
SELECT A.colum, B.colum,....N.colum
FROM
table1 as A, table1 as B, table1 as C .... table2 as M, table2 as N ....
where
A.colum1<B.colum1 and
C.colum1=D.colum1 and
....
在查詢中,表1,表2 ......是單列的表,他們是最終結構的組成部分。這種自連接格式最適合我的問題嗎?我發現它在PostgreSQL中非常慢,但在SQLite中很快,這讓我感到困惑。
無需使用同一列的兩個表的,視情況而定。看我的例子。 – jean
對於我的第二種格式,它是自交叉連接嗎?就好像它是,當有很多表時,計算將變得非常複雜。我有一個類似的例子,它在SQLite中運行速度很快,但在PostgreSQL中非常緩慢。 – user3329081
@ user3329081你可以這樣想,對我來說'CROSS JOIN'意味着一個無限的關係,一個完整的笛卡爾產品,在這個例子中,你並沒有將每條記錄都加入到其他記錄中,產品。 –