2013-04-03 7 views
15

Kann HQL auf die Ergebnismenge einer anderen Abfrage auswählen?
Zum Beispiel:Kann HQL auf die Ergebnismenge einer anderen Abfrage auswählen?

SELECT COUNT(*) FROM (SELECT * FROM Table) 


ich es in SQL tun können, aber als ich versuchte, wie oben in HQL aber das es zeigt mir nur Syntaxfehler „unerwartetes Token: (in der Nähe von Zeile 1, Spalte 22 ...“

+0

ich gleiches Problem habe, schlagen Sie bitte genaue Lösung Sie –

Antwort

11

HQL unterstützt subqueries, sie können jedoch nur in der Auswahl auftreten oder die where-Klausel das Beispiel Sie bieten am besten als eine gerade Anweisung in HQL Zum Beispiel schrieb würde:..

select count(*) from table t (where table is the entity name) 

Wenn die Abfrage beinhaltet eine kompliziertere Aussage als (select * from Table), würde ich empfehlen, diese Logik in eine Ansicht zu setzen und dann eine Entität basierend auf dieser Ansicht zu erstellen.

Für Datenbanken, die Subselects unterstützen, unterstützt Hibernate Unterabfragen in Abfragen. Eine Unterabfrage muss von Klammern umgeben sein (oft durch einen SQL-Aggregatfunktionsaufruf). Sogar korrelierte Unterabfragen (Unterabfragen, die sich auf einen Alias ​​in der äußeren Abfrage beziehen) sind zulässig.

Beispiel

from DomesticCat as cat 
where cat.name not in (
    select name.nickName from Name as name 
) 
+0

verwendet Gibt es ein Kriterium gleichwertig? –

0

Mit Unterabfrage, wie Sie wünschen ist nicht möglich . Eine Möglichkeit ist mit einem deutlichen so:

SELECT COUNT(DISTINCT t.id) FROM table t INNER JOIN t.list l 
    WHERE t.status = 'ST1' AND l.status = 'ST2'" 

verwenden ich die innere join eine ausgewählte Wiederholung auszudrücken

Verwandte Themen