[英]Select rows from a table where row in another table with same id has a particular value in another column
[英]Select one row with same id and match value in another column from another table
我目前正在開發 Spring Boot Webapp,我想在其中使用 JPA 檢索任務。 一個任務可以有多個需求,我的客戶創建了與他的婚禮相關的需求答案。 我現在想要 select 所有require.answer_value 都以“真”回答的任務。
我的相關數據庫架構是:
我目前的查詢是這樣的:
我現在想檢查具有相同 uuid 的任務是否所有 require_answer 都為 true? 我怎樣才能做到這一點?
問候
編輯:我的解決方案,在代碼而不是 jpql 中過濾,因為我無法讓它工作
@Query(
"select t,ra from Task t, RequirementAnswer ra, Requirement r, Wedding w where ra.requirement = r and w.id = :weddingId and t member of r.tasks"
)
fun findByWedding(weddingId: Long): List<Tuple>?
}
這是過濾:
fun getTasksByWedding(wedding: Wedding?): List<Task> {
val tasks: MutableMap<Task,String> = mutableMapOf()
wedding?.id?.let { taskRepository.findByWedding(it) } ?.map {
val task = it.get(0) as Task
val requirementAnswer = it.get(1) as RequirementAnswer
tasks[task]?.let { taskAnswer ->
if(taskAnswer != requirementAnswer.answerValue){
tasks.remove(task)
}
}?: let {
if(requirementAnswer.answerValue == "true"){
tasks[task] = requirementAnswer.answerValue
}
}
} ?: throw ResponseStatusException(HttpStatus.BAD_REQUEST, "Wedding doesn't exist")
return tasks.map { it.key }
}
使用 SQL 您可以使用子選擇來比較計數:
select t.*
from task t
join task_requirement tr on t.uuid = tr.task_id
join requirement r on tr.requirement_id = r.id
join requirement_answer ra1 on r.id = ra1.requirement_id
join wedding_requirement_answer wra1 on ra1.id = wra1.requirement_answer_id
where wra1.wedding_id = 1
and ( (select ra2.requirement_id
from requirement_answer ra2
join wedding_requirement_answer wra2 on ra2.id = wra2.requirement_answer_id
where wra2.wedding_id = wra1.wedding_id
and ra2.requirement_id = ra1.requirement_id))
=
(select ra3.requirement_id
from requirement_answer ra3
join wedding_requirement_answer wra3 on ra3.id = wra3.requirement_answer_id
where wra3.wedding_id = wra1.wedding_id
and ra3.requirement_id = ra1.requirement_id
and ra3.answer_value = 'true');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.