多表查詢:獲取特定公司產(chǎn)品的最新一次檢測(cè)報(bào)告
在兩個(gè)表相互關(guān)聯(lián)的情況下,有時(shí)需要查詢多張表以獲取所需數(shù)據(jù)。例如,如果我們有兩張表:產(chǎn)品信息表(pro)和檢測(cè)信息表(procheck),其中 procheck 表中的 pro_id 與 pro 表中的 id 關(guān)聯(lián)。每個(gè)產(chǎn)品可能有多個(gè)檢測(cè)記錄。
問(wèn)題:
如何查詢某個(gè)特定公司(pro 表中的 company_id)生產(chǎn)的所有產(chǎn)品的最新一次檢測(cè)報(bào)告?
示例查詢:
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
登錄后復(fù)制
然而,此查詢返回了該公司的所有檢測(cè)記錄,而不是按產(chǎn)品分組的最新記錄。
解決方案:
為了獲取最新記錄,需要使用子查詢來(lái)識(shí)別每個(gè)產(chǎn)品對(duì)應(yīng)的最新檢測(cè)日期。然后,將此子查詢與原始查詢連接起來(lái),以篩選出最新日期的記錄。
修正后的查詢:
(你的 SQL 語(yǔ)句) 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;
登錄后復(fù)制
此查詢將返回每個(gè)產(chǎn)品的最新檢測(cè)報(bào)告,滿足特定公司(company_id = 487)的過(guò)濾條件。