0

私が取り組んでいるクエリがあり、テーブル tblmovementhyst から各 socialSecurityNumber の最大レコードを取得しています。これは正常に機能しますが、市民テーブルに戻って、tblcitizens テーブルにはあるが tblmovementhyst には存在しないレコードも表示したいと考えています。

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`)
4

1 に答える 1

1

最初のテーブルからすべての行を返し、2 番目のテーブルに一致する行のみを返す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 になります。

于 2013-05-05T20:26:34.050 に答える