例如表student
表teacher
1、正如圖所示,表student中得表中得teacher_id對應的是表teacher中的id集合,如何把這這兩張表連起來搞得人頭大,先是用了 LOCATE()
sql語句如下:select s.id,s.name,t.name as teacher from student as s left join teacher as t on LOCATE(t.id,s.teacher_id)>0
結果如下: 看似沒有問題,但是實際上它是一個模糊匹配字符串,如果表數據變成這樣就會出問題:
例如表student:
teacher:
繼續執行下上面那條sql語句:select s.id,s.name,t.name as teacher from student as s left join teacher as t on LOCATE(t.id,s.teacher_id)>0
執行結果:
實際上大家都沒有 1號張三老師,這是因為把它當成了模糊匹配 “12”,“13”中都包含了字符串“1”所以就匹配上去了,很明顯達不到我們的業務要求。
2、最后查找發現了FIND_IN_SET()這個函數,模擬上面的兩種情況執行下面這條語句
sql:select s.id,s.name,t.name as teacher from student as s left join teacher as t on FIND_IN_SET(t.id,s.teacher_id)
第一種情況的執行結果:
第二種情況的執行結果:
正好完美符合了我們的要求。