如何在多表查詢中獲取某個公司的最新檢測報告?
在多表查詢中,我們需要考慮如何從不同表中提取相關(guān)數(shù)據(jù)??紤]以下場景:
有兩張表,分別存儲產(chǎn)品信息(pro)和檢測信息(procheck),其中 procheck 中的 pro_id 與 pro 中的 id 關(guān)聯(lián),每個產(chǎn)品可能對應(yīng)多個檢測信息記錄。
現(xiàn)在我們要查詢某個特定公司(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
登錄后復(fù)制
為了獲取最新的檢測報告,我們需要進(jìn)一步篩選信息。首先,我們需要查詢 procheck 表中的每個產(chǎn)品的最新 checkdate:
select pro_id, max(checkdate) as max_checkdate from procheck group by pro_id
登錄后復(fù)制
然后,我們將此結(jié)果與初始查詢的表(稱為 t1)進(jìn)行連接,并使用 procheck__pro_id 和 procheck__checkdate 進(jìn)行匹配。最終的查詢?nèi)缦拢?/p>
SELECT t1.* FROM 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ù)制
這樣就能得到某個特定公司生產(chǎn)的所有產(chǎn)品的最新一次檢測報告。