2013-08-19 3 views
0

il est possible d'utiliser les résultats d'une sélection sous la forme d'une table pour une autre instruction de sélection (en d'autres termes: supérieure). est-il équivalent à JPQLjpql select dans select

Voici mes exemples d'instructions sql

SELECT X.NAME, SLS.TOTAL AS BENEFIT 
(SELECT * FROM PERSON) X 
INNER JOIN SALESMAN SLS ON SLS.PERSON_ID = X.ID 

quelle est la equivalant cette déclaration JPQL?

+0

Pourquoi avez-vous besoin de 'SELECT *' imbriqué? - Il va tuer la performance. Vous pouvez obtenir le même résultat beaucoup plus efficacement avec 'SELECT X.NAME, SLS.TOTAL AS BENEFIT DE PERSONNE X INNER JOIN SALESMAN SLS SUR SLS.PERSON_ID = X.ID' –

+0

Si vous ne l'avez pas déjà lu, ayez un regardez [http://openjpa.apache.org/builds/1.2.3/apache-openjpa/docs/jpa_langref.html#jpa_langref_subqueries] –

+0

CHOISISSEZ X.NAME, SLS.TOTAL À TITRE DE BÉNÉFICE DE LA PERSONNE INNER JOIN SALESMAN SLS ON SLS.PERSON_ID = PERSON.ID il duplique le résultat donc j'utilise imbriqué select – user2648768

Répondre

0

Non, ce n'est pas possible. Les sous-requêtes ne peuvent être utilisées que dans les clauses WHERE et HAVING, comme indiqué dans la spécification JPA 2.0:

Les sous-requêtes peuvent être utilisées dans la clause WHERE ou HAVING. [58]
...
[58] Les sous-requêtes sont limitées aux clauses WHERE et HAVING dans cette version . La prise en charge des sous-requêtes dans la clause FROM sera considérée comme dans une version ultérieure de cette spécification.

Toujours dans JPA 2.1 cela n'a pas été changé.