sql裡面leftjoin多表的問題記錄

2021-07-26 22:41:22 字數 942 閱讀 7166

1.做關聯時候,

on裡面只寫兩個表能夠有外來鍵關係的字段,有多個欄位則用and連線一起寫上,

如果少乙個,則會產生2倍的資料量,如果少2個,則會產生四倍的資料量,以此類推,而且最要命的問題是多產生出的這些資料沒有任何作用而且全是干擾資料,會在我們的程式上滋生很多問題,例如在程式裡面你認為經過查詢之後符合條件的資料只會有一筆,所以你一直是用datatable1.rows(0)(0)這樣給畫面欄位塞值的,可是發現有時候對有時候不對(第一次新增時候是對的,以後修改後再查詢又是錯的).這就是因為多出來的資料導致了這個問題.

2.為什麼呢?on裡面只允許寫關聯字段,多個用and連線起來,如果你寫了某乙個表的條件在裡面,其實是沒有作用的.例如b on a.uid=b.uid and a.uname='mike',這裡a.uname='mike'其實就沒有產生任何作用.所以樓主上面的理由不妥哦:對於右邊表的每條記錄,顯然a.uname='mike'這個條件都是成立.而把這些非關聯的條件要寫在where裡面.

3.記住是在子表的on裡面要寫所有和主表有關聯的字段,不可以少.至於說有很多重複關聯的字段,我現在的做法是把主表子表已經子表之間關聯的字段都寫上.這是安全的做法.

distinct順序:sql server /oracle:先顯示需要的字段,再distinct

另外有一點是:left join,inner join from a,b

的應用場合:left join用在大多數場合,如果你是要講主表中符合條件(where主表.欄位= '中國')的資料都查出來,那麼就用它.

inner join則是說如果你要查詢的資料有嚴格的條件限制,即要求主表完全滿足又要求子表完全滿足,而且不能在子表中用null的形式搪塞,那麼就用inner join吧.

最後乙個是我們原來在書本中的知識了,功能和inner join是一模一樣的,估計是是因為考慮到from這樣的形式不夠清晰吧.

sys_guid()能夠生成乙個隨機字段用以存主鍵

Left join多表查詢

sql 多表查詢中用到的連線查詢使用較多的是left join,連線的表查詢到的資料為空時,主表顯示null值,不會影響整個查詢結果 具體用法 1.建立表單 教師表和學院表 create table if not exists teacher id int 11 auto increment pri...

關於多表的leftJoin

建立表結構如下 create table x.a a1 int,a2 varchar 10 create table x.b b1 int,b2 varchar 10 create table x.c c1 int,c2 varchar 10 insert into x.a values 1 hah...

論SQL語句中的Left join 多表關係

以前,被子查詢這種語句弄得超迷糊,然後在交大的學習平台上發現原來很多情況都不需要子查詢,直接乙個where就搞定了,但是並不了解哪些對應關係。但是啊,不知道其他初學者有沒有這種感受 看網上哪些例子是非常懂的,然而自己用在專案中,思維卻卡機了。無奈之下,我還是繼續研究了哪位大神的原始碼,如下 sele...