開發經常犯的錯誤之 join表連線關聯查詢

2021-09-05 03:54:08 字數 1527 閱讀 1215

最近在審核sql的時候,發現一些開發經常犯這個錯誤,下面我舉個簡單的例子,說明一下:

查詢出a表和b表id相同的記錄(並且把b表沒有的id記錄也查詢出來),且name名字等於'b'的記錄。

表資料:

mysql> select * from t1;           

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

| id | name |

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

| 1 | a |

| 2 | b |

| 3 | c |

| 4 | d |

| 5 | e |

| 6 | b |

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

6 rows in set (0.00 sec)

mysql> select * from t2;

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

| id | name |

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

| 1 | a |

| 2 | b |

| 3 | cc |

| 4 | e |

| 5 | b |

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

5 rows in set (0.00 sec)

錯誤寫法:

mysql> select * from t1 left join t2 on t1.id=t2.id and t1.name='b';

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

| id | name | id | name |

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

| 2 | b | 2 | b |

| 1 | a | null | null |

| 3 | c | null | null |

| 4 | d | null | null |

| 5 | e | null | null |

| 6 | b | null | null |

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

6 rows in set (0.00 sec)

正確寫法:

mysql> select * from t1 left join t2 on t1.id=t2.id where t1.name='b';

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

| id | name | id | name |

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

| 2 | b | 2 | b |

| 6 | b | null | null |

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

2 rows in set (0.00 sec)

呵呵,可以當一道面試題了。

經常犯得的小錯誤

1.bool定義時候需要加標頭檔案 include 2.強制型別轉換的原理 只是在轉換的過程中臨時生成乙個變數來代替原來的量,當操縱結束的時候,這個臨時變數也消失。類似這樣的注釋,只能把while 1 這個東西注釋掉,最終程式還是會執行一次printf 預處理結果。4.scanf d num i d...

C 開發者最經常犯的 8 個錯誤

在和c 新手一起工作的時候,我注意到他們經常重複一些錯誤。這些錯誤,當你指出來的時候很容易理解。然而,如果乙個開發者沒有意識到這些錯誤,將會影響正在開發的軟體的質量和效率,因此,我決定總結8個常見的錯誤。1.使用字串連線代替stringbuilder 在你向乙個字串追加新字串的時候,字串連線方法是可...

if else判斷語句中經常犯的乙個錯誤

解法 如果我這麼寫,執行一下看看。當輸入小於0和0 50之間的數時,均正常輸出,但是!當輸出大於50的時候,就出現了如上圖所示的問題 輸入59以後,不但輸出了超過50,還輸入了小於0,這顯然不是我要的結果!為何呢?這就涉及else的執行原理了 else會在上乙個if判斷為false時執行!這時候可以...