2011-01-09 16 views

Respuesta

3

[Este posteriormente buscar No todos los; consulte otras respuestas correctas.]

Puede establecer la lista como parámetro.

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

tratar también usando (etiquetas):, ya que depende de la implementación de la APP que está utilizando.

+1

Voy a probar esto en un corto tiempo. Sé que funciona si estoy comprobando si una etiqueta está en una lista de etiquetas. Pero ahora mi situación implica probar si una lista de etiquetas es un subconjunto de otra lista de etiquetas. – joshua

+0

¿Cuál fue la solución? – Phil

+0

Sí. eso funciono. – joshua

5

Trate de esta manera:

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

Esta respuesta funcionó para mí usando MySQL. @ nayan-wadekar respondió dando excepciones de gramática sql. – malloc4k

4

Nayans solución de trabajo Does'nt para mí. Está seleccionando cada 'x' que coincide con la primera (¿o alguna?) Entrada de la colección dada ': tags'. Si esto realmente funcionó para ti, deberías probar tu aplicación nuevamente;) podría ser dependiente de JPA, no lo sé.

Consejo: Trate Krzysztofs solución o el uso de minas:

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

No se puede engañar al cheque de tag que requiera dos etiquetas. y la pregunta tiene dos pero solo coincide con uno? – Amalgovinus

Cuestiones relacionadas