外連線消除的重大發現

2021-10-09 11:24:34 字數 1459 閱讀 4470

postgres=# select * from test1 left join test2 on test1.id1=test2.id3 and test2.id3 is not null;

id1 | id2 | id3 | id4

-----+

-----+

-----+

-----2

|3|2

|323|

4|3|

5512|34

||(3 rows)

postgres=#

那我要大聲發問:test2.id3 is not null可以下推嗎(感覺上是可以的,因為它應用了nullable的表)?到底應不應該把test1.id1=test2.id3 and test2.id3 is not null看作整體的乙個連線條件來看呢,很疑惑。如果看作是乙個連線條件,那這個連線條件引用了nonnullable的表,貌似整體又不能下推。

test=# select * from test1;

id1 | id2 | id3

-----+

-----+

-----12

| dfg |322

| dfg |32(

2 rows)

test=# select * from test2;

id4 | id5 | id6

-----+

-------

+-----

12| dfg |

32162

| sdgsd |

302(

2 rows)

test=# select * from test1 left join test2 on  test2.id4 = 13;

id1 | id2 | id3 | id4 | id5 | id6

-----+-----+-----+-----+-----+-----

12 | dfg | 32 | | |

2 | dfg | 32 | | |

(2 rows)

test=# create table test3

(id1 int

,id2 text,id3 int);

create table

test=# select * from test1 left join test3 on true

; id1 | id2 | id3 | id1 | id2 | id3

-----+

-----+

-----+

-----+

-----+

-----12

| dfg |32|

||2| dfg |32|

||(2 rows)

關於KMP演算法的重大發現

之前寫kmp模板的時候,nx i 代表最大的乙個x,使s 1,x 1 是s 1,i 1 的字尾。方法1 然而網上還有另一種方法求nx陣列,nx i 表示最大的乙個x,使s 1,x 是s 1,i 的字尾。方法2 兩種nx陣列在具體匹配的時候方法稍有不同,但都能正確匹配字串。但是在做字串dp題的時候,發...

資料庫的外連線 內連線 左外連線,全外連線

students表和advisors表 一 內連線 按照advistor id進行表的合併,合併後的資料只有兩個表中advistor id都有的值,對應的行 二 左外連線 按照advistor id進行的左外連線合併,保證表students中advistor id的每一列都在合併後的新錶中,對於ad...

外連線的語法

平時習慣了oracle的連線語法,每次看到join這種格式的,都要想半天。還是把它列一下,方便自己下次用。select table1.column,table2.column from table1 cross join table2 natural join table2 join table2 ...