首先,新建數據表aaa、bbb以及他們相關聯的數據表avb;欄位名如下圖 填充點數據,如下: 上面設計表的時候,故意在兩個表中有相同欄位con,如果不做處理的話,在php程式中,看看什麼情況?得到的結果集中的con是aaa表的,還是avb表的? 如果將aaa LEFT JOIN avb 改為 avb ...
首先,新建數據表aaa、bbb以及他們相關聯的數據表avb;欄位名如下圖
填充點數據,如下:
上面設計表的時候,故意在兩個表中有相同欄位con,如果不做處理的話,在php程式中,看看什麼情況?得到的結果集中的con是aaa表的,還是avb表的?
1 $sql = "SELECT * FROM aaa LEFT JOIN avb ON aaa.a_id = avb.a_id"; 2 $db->query($sql); 3 $result_list = $db->get_all(); 4 echo '<pre>'; 5 print_r($result_list);
如果將aaa LEFT JOIN avb 改為 avb RIGHT JOIN aaa呢?
答曰:1.理論上結果集是一樣的 2.但是php中對相同項的內容,取的是後表中的。
總結一下:
a left join b , a的記錄全保留,b往a填內容,相同欄位記錄留b的(left join左為主,相同欄位留後表的)
a right join b, b的記錄全保留,a往b填內容,相同欄位記錄留b的(right join右為主,相同欄位留後表的)
第2大問題,3個表如何連接查詢?取出對應的數據?
答曰:上面左連接、右連接搞明白得到的結果集後,三個表就是2個表連接後的結果集再和第三個表連接。寫法上如下
SELECT * FROM aaa INNER JOIN avb ON aaa.a_id = avb.a_id INNER JOIN bbb ON avb.b_id = bbb.b_id
上面的語句用where子句也可以
SELECT * FROM aaa, bbb, avb WHERE aaa.a_id = avb.a_id AND bbb.b_id = avb.b_id
再看一遍
如果是在PHP中得到的結果集是: