2 つのテーブルがあり、1 つはすべてのドライバーの詳細を含むドライバーで、テーブルは dTraining です。
ドライバーの構造は
CREATE TABLE IF NOT EXISTS `driver` (
`driverID` int(5) NOT NULL,
`clientID` int(5) NOT NULL,
`driverName` varchar(100) NOT NULL,
`driverDateOfBirth` date NOT NULL,
`driverStatus` enum('a','d','i') NOT NULL DEFAULT 'a'
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
dTrainingの構造は
CREATE TABLE IF NOT EXISTS `dTraining` (
`dTrainingID` int(5) NOT NULL,
`cTrainingID` int(5) NOT NULL,
`trainingID` int(11) NOT NULL,
`driverID` int(5) NOT NULL,
`clientID` int(5) NOT NULL,
`driverTrainingDate` date NOT NULL,
`driverTrainingUpdateStatus` enum('d','a') NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
私が必要とするのは、このようなクエリを実行すると、ドライバーが持っている多くのトレーニング データから最新のトレーニングが得られることです。そのため、そこでサブクエリを実行する方法について助けが必要です。
SELECT driver.driverID,dTraining.driverTrainingDate
FROM driver,dTraining
現在、私はこのクエリを持っています。サンプル出力は
driverID=1 , driverTrainingDate=2013-02-01
driverID=2 , driverTrainingDate=2013-02-02
SELECT driver.driverID,b.driverTrainingDate
FROM driver
LEFT JOIN (
SELECT B1.*
FROM dTraining AS B1
LEFT JOIN dTraining AS B2
ON B1.driverID = B2.driverID
AND B1.cTrainingID = B2.cTrainingID
AND B1.driverTrainingDate< B2.driverTrainingDate
WHERE B1.cTrainingID =".$cTID." And B2.driverID IS NULL) as b
ON ( driver.driverID= b.driverID)
B1.driverTrainingDate< B2.driverTrainingDate ではなく B1.driverTrainingDate> B2.driverTrainingDate を配置する必要があるのはなぜですか? B2.driverID IS NULL の必要性