多表查詢最新檢測(cè)報(bào)告
求取特定公司下所有產(chǎn)品的最新檢測(cè)報(bào)告,通常要進(jìn)行多表查詢。本文將通過處理產(chǎn)品信息表和檢測(cè)信息表兩個(gè)表的關(guān)聯(lián)數(shù)據(jù),解決此問題。
給定兩張表:產(chǎn)品信息表 pro 和檢測(cè)信息表 procheck。pro 表中 company_id 字段用于關(guān)聯(lián)公司信息,而 procheck 表中的 pro_id 字段與 pro 表中的 id 字段關(guān)聯(lián),每個(gè)產(chǎn)品對(duì)應(yīng)多個(gè)檢測(cè)信息記錄。
初始查詢?nèi)缦拢?/p>
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ù)制
這個(gè)查詢可返回該特定公司的所有產(chǎn)品及相關(guān)檢測(cè)信息。然而,我們需要僅找出每個(gè)產(chǎn)品的最新檢測(cè)報(bào)告。
可以使用如下改良后的查詢:
(你的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;
登錄后復(fù)制
這個(gè)查詢通過以下步驟得出最新檢測(cè)報(bào)告:
- 使用子查詢求出 procheck 表中每個(gè)產(chǎn)品對(duì)應(yīng)的最新 checkdate,形成臨時(shí)表 t2。
- 將 t1 和 t2 在 pro_id 和 checkdate 字段上進(jìn)行連接,確保僅選擇 procheck 表中的最新檢測(cè)報(bào)告。
- 最終結(jié)果中將包含該特定公司下的所有產(chǎn)品的最新檢測(cè)報(bào)告。