2013-02-18 2 views
2

Le tableau de marquage a 3 colonnes: id (la clé primaire), tag et ressources.Éliminer sous-requête dans la clause FROM

Je veux sélectionner les étiquettes associées à au moins 3 ressources. Une ressource peut être associée plusieurs fois à la même balise, donc un seul GROUP BY n'est pas suffisant.

Mon actuelle requête SQL est la suivante:

SELECT tag FROM 
(SELECT resource, tag FROM tagging GROUP BY resource, tag) AS tagging 
GROUP BY tag HAVING count(*) > 2; 

J'ai besoin de convertir cette demande en HQL et HQL n'accepte pas les sous-requêtes à l'intérieur du DE clause.

Y at-il un (rapide) façon de faire la même chose sans utiliser une sous-requête, ou avec une sous-requête dans la clause WHERE ?

Merci

+0

Votre texte dit « au moins 2 » votre requête en cours est '> 2'. Lequel est-ce? –

+0

Vous avez raison, je l'ai corrigé, même si cela n'a pas vraiment d'importance. – eskaev

Répondre

2

Pour trouver des balises qui sont associés à plus de 2 ressources différentes, vous pouvez utiliser

SELECT tag 
FROM tagging 
GROUP BY tag 
HAVING count(DISTINCT resource) > 2; 
+0

Merci, c'est génial. Que faire si je ne veux compter que les ressources qui ont au moins 3 occurrences de la balise (en ajoutant HAVING count (*)> 2 dans la sous-requête)? – eskaev

Questions connexes