2011-01-09 13 views

risposta

3

[Questo cerca QUALSIASI non tutti; Si prega di fare riferimento ad altre risposte corrette.]

È possibile impostare l'elenco come parametro.

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

Prova anche a utilizzare (: tag), in quanto dipende dall'implementazione JPA che stai utilizzando.

+1

mi metterà alla prova questo in breve tempo. So che funziona se sto controllando se un tag è in una lista di tag. Ma ora la mia situazione implica testare se un elenco di tag è un sottoinsieme di un altro elenco di tag. – joshua

+0

Qual era la soluzione? – Phil

+0

Sì. quello ha funzionato. – joshua

5

Prova in questo modo:

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

Questa risposta ha funzionato per me usando MySQL. La risposta @ nayan-wadekar stava dando delle eccezioni alla grammatica sql. – malloc4k

4

Nayans soluzione lavoro does'nt per me. Seleziona ogni 'x' che corrisponde alla prima (o qualsiasi?) Voce della raccolta data ': tag'. Se questo ha funzionato davvero per te, dovresti testare di nuovo l'applicazione;) potrebbe essere dipendente dall'APP - Non lo so.

Suggerimento: Prova Krzysztofs soluzione o l'uso miniera:

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

Non si può ingannare il controllo delle variabili richiedendo due tag. e la domanda ha due ma solo uno corrispondente? – Amalgovinus

Problemi correlati