【发布时间】:2021-05-27 20:53:57
【问题描述】:
我在 MySQL 中有这样的查询:
SELECT am.*
FROM bettha_adherence_area_manager am
INNER JOIN bettha_adherence_area aa ON am.bettha_adherence_area_id = aa.id
INNER JOIN selection_process sp ON aa.selection_process_id = sp.selection_process_id
INNER JOIN company_country cc ON sp.company_country_id = cc.company_country_id
INNER JOIN bettha_adherence_area_manager_execution baame
on am.bettha_adherence_area_manager_id = baame.bettha_adherence_area_manager_id
WHERE cc.company_country_id = :companyCountryId
AND (LOWER(am.email) LIKE LOWER(CONCAT('%', :search, '%')) OR
LOWER(am.full_name) LIKE LOWER(CONCAT('%', :search, '%')))
AND IF(:isFinished IS NOT NULL, IF(baame.finished_date IS NOT NULL, :isFinished, NOT :isFinished), TRUE)
GROUP BY am.email;
或者像这样:
SELECT am.* FROM bettha_adherence_area_manager am
INNER JOIN bettha_adherence_area aa ON am.bettha_adherence_area_id = aa.id
INNER JOIN selection_process sp ON aa.selection_process_id = sp.selection_process_id
INNER JOIN company_country cc ON sp.company_country_id = cc.company_country_id
INNER JOIN bettha_adherence_area_manager_execution baame on am.bettha_adherence_area_manager_id = baame.bettha_adherence_area_manager_id
WHERE cc.company_country_id = :companyCountryId AND
(LOWER(am.email) LIKE LOWER(CONCAT('%', :search, '%')) OR
LOWER(am.full_name) LIKE LOWER(CONCAT('%', :search, '%'))) AND
CASE WHEN (:isFinished IS NOT NULL) THEN (
CASE WHEN (baame.finished_date IS NOT NULL) THEN
(:isFinished)
ELSE
NOT :isFinished END
)
ELSE TRUE END
GROUP BY am.email;
两个查询都做同样的事情。我想将其中一个查询转换为 JPQL,但是 JPQL 中不存在“if else”,并且“case when”也不能那样工作。
在 JPQL 中如何查询?
【问题讨论】:
标签: java mysql jpa spring-data jpql