Selecting where an entity contains a list thats a subset of another list

后端 未结 3 531
星月不相逢
星月不相逢 2020-12-05 20:19

I am writing a JPQL query and i have the following scenario. I have a Question entity which contains a list of Tags. I would like to select all Questions that contains a gi

相关标签:
3条回答
  • 2020-12-05 20:46

    Try like this:

    select distinct q from Question q join q.tags as t 
    where t.name in (:tags) 
    group by q.id, q.author, q.title, q.content,q.postedAt 
    having count(t.id) = :size
    
    0 讨论(0)
  • 2020-12-05 20:52

    Nayans solution does'nt work for me. Its selecting every 'x' which matches the first (or any?) entry of the given collection ':tags'. If this really worked for you, you should test you application again ;) might be JPA dependend - I don't know.

    Tip: Try Krzysztofs solution or use mine:

    SELECT x FROM Question x 
    WHERE x IN (
        SELECT y FROM Question y
        INNER JOIN y.tags yt
        WHERE yt IN (
            :tags
        )
        GROUP BY y
        HAVING COUNT( DISTINCT yt) = (
            :tagsSize // should be clear ;)
        )
    )
    
    0 讨论(0)
  • 2020-12-05 21:00

    [This searches for ANY not ALL; please refer other correct answers.]

    You can set list as a parameter.

    SELECT x FROM Question x WHERE x.tags IN :tags
    

    Also try using (:tags), as it depends on the JPA implementation you are using.

    0 讨论(0)
提交回复
热议问题