如何在多表查詢中獲取某個公司的最新檢測報告?
在多表查詢中,我們需要考慮如何從不同表中提取相關數據。考慮以下場景:
有兩張表,分別存儲產品信息(pro)和檢測信息(procheck),其中 procheck 中的 pro_id 與 pro 中的 id 關聯,每個產品可能對應多個檢測信息記錄。
現在我們要查詢某個特定公司(company_id)生產的所有產品的最新一次檢測報告。雖然可以使用類似以下的查詢,但它會返回所有檢測報告:
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
登錄后復制
為了獲取最新的檢測報告,我們需要進一步篩選信息。首先,我們需要查詢 procheck 表中的每個產品的最新 checkdate:
select pro_id, max(checkdate) as max_checkdate from procheck group by pro_id
登錄后復制
然后,我們將此結果與初始查詢的表(稱為 t1)進行連接,并使用 procheck__pro_id 和 procheck__checkdate 進行匹配。最終的查詢如下:
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;
登錄后復制
這樣就能得到某個特定公司生產的所有產品的最新一次檢測報告。