2014-03-18 30 views
0

所以我的問題是讓我說我​​有3個表:「customerPerAdmin」,「管理員」,「客戶」 和我加入他們,但如果,customerPerAdmin.AdminID會爲某個用戶設置爲0? 會發生什麼,它會忽略與adminID等於零的客戶,我不希望發生這種情況,我想將admins.FirstName和admin.LastName設置爲空。SQL與空數據檢索沒有聯繫表

customerPerAdmin表:

ID AdminID CustomerID 
40 20  49   
41 25  48   
42 20  50 
43 0  51 

,這是查詢

SELECT SQL_CALC_FOUND_ROWS `customers.UniqID`, 
     `customerPerAdmin`.`AdminID`, 
     `customerPerAdmin`.`CustomerID`, 
     `customerPerAdmin`.`IsDeleted`, 
     `customerPerAdmin`.`pr`, 
     `admins`.`ID`, 
     `admins`.`GroupID`, 
     `admins`.`FirstName` AS adminFirstName, 
     `admins`.`LastName` AS adminLastName, 
     `admins`.`IsDeleted`, 
     `customers`.`FirstName`, 
     `customers`.`LastName`, 
     `customers`.`Phone`, 
     `customers`.`Email`, 
     `customers`.`GroupID`, 
     `customers`.`UniqID`, 
     `customers`.`Created`, 
     `customers`.`IsDeleted`, 
     `customers`.`ID` 
FROM (`customers`) 
JOIN `customerPerAdmin` ON `customers`.`ID`=`customerPerAdmin`.`CustomerID` 
JOIN `admins` ON `admins`.`ID`=`customerPerAdmin`.`AdminID` 
AND `customers`.`GroupID` = '8' 
AND `customerPerAdmin`.`pr` = 0 
GROUP BY `customers`.`ID` 
ORDER BY `customers`.`ID` DESC LIMIT 20 

所以會發生什麼,那隻能說明我的40,41,42的ID,而不是43,因爲他不能將它與ID爲0的管理員關聯,因爲他不存在。 即使它不相關,我仍然可以顯示ID 43?

在此先感謝。

+1

變化 – 2014-03-18 20:38:58

+0

太感謝你了!工作!,你能給我更詳細的關於外部和內部連接的解釋嗎?因爲我真的不明白他們 – Bonik

+1

http://clip2net.com/s/72syyq – KrazzyNefarious

回答

1

在你的代碼需要從INNER JOIN改變LEFT OUTER JOIN

使用INNER JOIN您強制所有行進行匹配。 LEFT OUTER JOIN可讓您獲取主表中的所有行以及來自聯接表的所有匹配記錄。

這裏是快速和骯髒JOIN教訓

INNER JOINJOIN
從那裏所有行匹配

LEFT OUTER JOINLEFT JOIN
獲取來自主表數據,並只能從連接表數據表獲取數據(s)數據可以匹配。

FULL OUTER JOINFULL JOIN
從兩個表中獲取數據並匹配所有可能的數據。

還有RIGHT加入,但我從來沒有使用它。這與LEFT只是製作另一張表的主要來源相同。有些人在同一個查詢中同時使用了LEFTRIGHT,此時我開始懷疑他們是否知道他們在做什麼。

除了在評論鏈接可以查看從`INNER JOIN`爲`LEFT OUTER JOIN` Join Fundamentals from Microsoft