2013-05-05 75 views
0

我有一個查詢我工作,我正在從表tblmovementhyst每個社會安全號碼的最大記錄。這可以正常工作,但是我想回到公民表中以顯示tblcitizens表中但不存在於tblmovementhyst中的記錄。MySql加入,返回沒有現有的記錄與空值

tblcitizens的主鍵是socialSecurityNumber,而tblmovementhyst的主鍵是citizenPositionNo。下的什麼我迄今他代碼:

SQL

select m.citizenSocialSecurityNumber,CONCAT(c.fName,' ',c.lName)as name, 
CONCAT(m.latAdd,',',m.longAdd)as latlng, t.citizenTypeId,max(m.citizenPositionNo)as positionNo 

from tblcitizens c LEFT JOIN tblcitizenType t 
    ON c.citizenTypeId = t.citizenTypeId 

LEFT JOIN tblmovementhyst m 
    ON m.citizenSocialSecurityNumber = c.socialSecurityNumber; 

tblmovementhyst

TABLE `tblmovementhyst` (
    `citizenPositionNo` int(11) NOT NULL AUTO_INCREMENT, 
    `citizenSocialSecurityNumber` int(11) NOT NULL, 
    `latAdd` decimal(18,14) NOT NULL, 
    `longAdd` decimal(18,14) NOT NULL, 
    `date` varchar(10) NOT NULL, 
    `time` time NOT NULL, 
    PRIMARY KEY (`citizenPositionNo`) 

tblcitizens

TABLE `tblcitizens` (
    `socialSecurityNumber` int(11) NOT NULL, 
    `fName` varchar(30) NOT NULL, 
    `lName` varchar(30) NOT NULL, 
    `oName` varchar(30) DEFAULT NULL, 
    `citizenTypeId` int(11) NOT NULL, 
    `dob` date NOT NULL, 
    PRIMARY KEY (`socialSecurityNumber`) 

回答

1

您應該使用LEFT JOIN,返回從第一個表中的第二個匹配所有的行,只有行:

SELECT ..., MAX(m.citizenPositionNo) AS positionNo 
FROM 
    tblcitizens c LEFT JOIN tblcitizenType t 
    ON c.citizenTypeId = t.citizenTypeId 
    LEFT JOIN tblmovementhyst m 
    ON m.citizenSocialSecurityNumber = c.socialSecurityNumber 
GROUP BY 
    ... 

如果有上tblcitizens一個記錄,但不是tblmovementhyst,MAX(citizenPositionNo )將爲NULL。

+0

這隻返回最大記錄和兩個表中匹配的內容。我需要匹配記錄和所有不存在的所有最大記錄 – devdar 2013-05-05 20:33:47

+0

我更新了您提供的結構的SQL – devdar 2013-05-05 20:34:40

+0

好吧,我犯了一個錯誤,我忘了包括組 – devdar 2013-05-05 20:37:24

相關問題