首次接觸SQL巢狀語句

2022-07-31 13:27:14 字數 904 閱讀 4927

終於要用到sql巢狀語句了,雖然不用巢狀語句也可以有其他解決方案,但既然碰到了就研究一下。遇到的問題是這樣,有兩個表a,b,要求把a和b裡面的每一條記錄都讀出來,而b表的每條記錄都通過外來鍵aid與a表裡的記錄建立唯一對應關係,但是b表裡面的資料只是乙個附加資訊,所以b表的記錄要比a表少的多~我只要在b表裡提取兩個字段m和n的資訊~但由於b表的記錄數並不和a表的記錄數相等,所以不能用簡單的select a.*,b.m,b.n from a,b where a.aid=b.aid來查詢了。因為這樣的話,如果b表是空的話,就會查詢出0條記錄~這是不符合需求的.....

在這種情況下,我想到了sql語句的巢狀,就嘗試用一下了。其實sql語句的巢狀就像是程式語言裡的迴圈巢狀,這樣子想就嘗試寫出了第一條巢狀sql語句:select *,(select m from b where b.aid=a.aid) as  m from a;這樣的結構就是每次在a表得出一條記錄後,再用aid作為條件在b表查詢一次,把得出的結果m作為字段m返給父查詢。這樣的巢狀只適合子查詢只返回乙個值的情況,也就像是上面所說的a表與b表的那種唯一對應關係。不過這條語句的子查詢只返回乙個字段m,這還不能滿足需要的,但在這種情況下子查詢也只能返回乙個字

段...

我用select *,(select concat(m,n) as mn from b where b.aid=a.aid) as mn from a;這樣子欄位mn得出是空值的,想不通~沒辦法了,只好這樣子:select *,(select m from b where b.aid=a.aid) as m,(select n from b where b.aid=a.aid) as n from a;這樣就沒問題了~可以滿足需要了~

不過這條語句雖然不是三層巢狀,但每次在a表中查詢出一條記錄就要在b表中查詢兩次,這樣的語句感覺還是不夠優化,但現在也想不到應該怎麼去優化這條語句~要繼續研究了~

首次接觸SQL巢狀語句

終於要用到sql巢狀語句了,雖然不用巢狀語句也可以有其他解決方案,但既然碰到了就研究一下。遇到的問題是這樣,有兩個表 要求把 和 裡面的每一條記錄都讀出來,而 表的每條記錄都通過外來鍵aid與 表裡的記錄建立唯一對應關係,但是 表裡面的資料只是乙個附加資訊,所以 表的記錄要比 表少的多 我只要在 表...

thinkphp if判斷巢狀語句

在建站的時候,安裝了一套php程式是thinkphp框架開發來的 裡面的list pid下還有list id型別,原先使用value 輸出 來判斷id進行輸出,但是由於標籤不能巢狀使用,無法判斷下級的list id值 所以使用了if語句來判斷。直接上語句 當前欄目值不是2 基本上這樣巢狀就可以解決,...

Python練習 for迴圈 if巢狀語句

1 輸入兩個正整數a b,計算這兩個數的最大公約數 歐幾里得演算法 1 求a和b的餘數r 2 如果r 0,則a和b的最大公約數是b 3 如果r 0,則將b的值賦給a,將r的值賦給b,重複第1 步,直到r 0 a int input 輸入a b int input 輸入b r a b while r ...