mysql外鏈接

一,原由

在學習一個新知識以前,最好先了解一下你爲什麼要學習這個知識,這個知識或技術能幫你作什麼,能夠給你帶來哪些幫助。
所以我先交代一下寫這篇隨筆的原由。html

我在作項目的時候遇到了一個比較有意思的狀況,sql

首先說明我有以下兩個比較重要的表學習

分別是 comment_table 和 comment_pic_tablespa

這兩個表分別用於存評論和評論附帶的圖片code

下面是我之前出問題的查詢sqlhtm

1 SELECT c.*,u.user_phone,u.user_headPic,u.user_email,p.comment_pic_path 2 FROM 
3 comment_table c,user_info_table u,comment_pic_table p 4 WHERE 
5 c.user_id=u.user_id AND 
6 p.comment_id=c.comment_id AND 
7 homestay_id='101622' ORDER BY comment_time DESC
8 LIMIT 0,3

你只須要注意我將comment_table 和comment_pic_table關聯。blog

由於我想要查詢完整的評論,確定是要將兩者關聯起來的。圖片

如此問題就來了。table

對於有圖片的評論,這樣當然能夠完整的查出我想要的數據(評論自己和評論圖片)。class

可是,對於沒有圖片的評論,則該sql一條記錄都查不出來。

這是因爲 p.comment_id=c.comment_id 這個條件致使的。(由於沒有圖片,天然"p"表comment_id對應的記錄爲null。)

學過sql的看到這裏應該已經發現問題了,沒發現的本身慢慢看吧。

 

對此,我能想到的就是用外鏈接語法解決。

外鏈接分爲左外鏈接,右外鏈接,和全外鏈接三種。

目前我還不清楚第三種的應用場景在哪裏,固然,昨天我甚至不知道外鏈接有何做用,由於我從未使用過這種語法去實際的解決什麼問題,即使我很早的便學習了外鏈接的概念和語法。

因此它的存在必然是有意義的,仍是學了好。否則指不定之後哪天遇到問題了都不知道該用什麼技術去解決這個問題。

知識的廣度和深度是同級的。

二,定義

左外鏈接,就是將兩個表關聯查詢,可是和內鏈接不一樣的是,對於關聯查詢沒有知足搜索條件的記錄,內鏈接一條都不顯示,但左外鏈接仍然會顯示左表的所有記錄。(你能夠給左表增長where條件再次過濾。)

三,代碼

在瞭解了外鏈接的概念以後,個人sql就變成了以下形式:

1 SELECT c.*,u.user_phone,u.user_headPic,u.user_email,p.comment_pic_path 2 FROM 
3 ( 4  comment_table c INNER JOIN user_info_table u ON c.user_id=u.user_id
5  ) 6 LEFT JOIN comment_pic_table p ON p.comment_id=c.comment_id 7 AND homestay_id='101622'
8 ORDER BY comment_time DESC
9 LIMIT 0,3

 

這種sql相比較以前的來講雖然查到數據了,可是仍然存在問題,就是多查了。

緣由上面已經說了:左外鏈接仍然會顯示左表的所有記錄。

可能有同窗會問了,你明明加了and過濾了啊,可是,這個and過濾的是右表的記錄,而不是左表。所以左表依然顯示所有記錄。

 

對此咱們再次作出修改,修改以後的sql以下:

1 SELECT c.*,u.user_phone,u.user_headPic,u.user_email,p.comment_pic_path 2 FROM 
3 ( 4  comment_table c INNER JOIN user_info_table u ON c.user_id=u.user_id 
5  AND homestay_id='101622'
6 ) 7 LEFT JOIN comment_pic_table p ON p.comment_id=c.comment_id 8 ORDER BY comment_time DESC
9 LIMIT 0,3

如此一來,咱們就能夠正確的查到想要的記錄了。

原文出處:https://www.cnblogs.com/twz123/p/12063635.html

相關文章
相關標籤/搜索