簡體   English   中英

Select 一行具有相同的 id 並且匹配另一個表中另一列中的值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM