多表查詢:獲取特定公司產(chǎn)品的最新一次檢測報告
在兩個表相互關(guān)聯(lián)的情況下,有時需要查詢多張表以獲取所需數(shù)據(jù)。例如,如果我們有兩張表:產(chǎn)品信息表(pro)和檢測信息表(procheck),其中 procheck 表中的 pro_id 與 pro 表中的 id 關(guān)聯(lián)。每個產(chǎn)品可能有多個檢測記錄。
問題:
如何查詢某個特定公司(pro 表中的 company_id)生產(chǎn)的所有產(chǎn)品的最新一次檢測報告?
示例查詢:
select `pro`.`id`,`pro`.`pm`,`pro`.`company_id`,procheck.id as procheck__id,procheck.pro_id as procheck__pro_id,procheck.checkdate as procheck__checkdate from `da_pro` `pro` left join `da_procheck` `procheck` on `pro`.`id`=`procheck`.`pro_id` where `pro`.`company_id` = 487
登錄后復制
然而,此查詢返回了該公司的所有檢測記錄,而不是按產(chǎn)品分組的最新記錄。
解決方案:
為了獲取最新記錄,需要使用子查詢來識別每個產(chǎn)品對應(yīng)的最新檢測日期。然后,將此子查詢與原始查詢連接起來,以篩選出最新日期的記錄。
修正后的查詢:
(你的 SQL 語句) t1 JOIN ( SELECT pro_id, MAX(checkdate) AS max_checkdate FROM procheck GROUP BY pro_id ) t2 ON t1.procheck__pro_id = t2.pro_id AND t1.procheck__checkdate = t2.max_checkdate;
登錄后復制
此查詢將返回每個產(chǎn)品的最新檢測報告,滿足特定公司(company_id = 487)的過濾條件。