Zastapienie group by przez subselect... mozliwe ?

0

mam takie quety z JPQL:

createQuery(
                "SELECT r.id, r.imie, r.nazwisko," +
                        " COUNT(re) From Dane2 re Right Join re.dane r"+
                         " where r.s = :s and r.imie in (:lista)" +
                       " Group By (r.id, r.imie, r.nazwisko)");

chcialabym teraz grupowanie zastapic podselectem w taki sposob:

.createQuery(
                "SELECT r.id, r.imie, r.nazwisko," +
                        " (SELECT count(*) From nie mam pojecia co) From Dane2 re Right Join re.dane r"+
                        " where r.s = :s and r.imie in (:lista)"  );

z gory dzieki za pomoc

0

Zastanów się jakie dane chcesz wyciągnąć z bazy.
Brak jest w zapytaniu klucza łączącego tabele.
Realizujesz to chyba w celach niekomercyjnych??

0

jest klucz laczacy, to przeciez JPQL:
From Dane2 re Right Join re.dane r

encja Dane2 ma referencje do encji Dane dane

w jakim sensie, byloby to zle w celach komercyjnych ?

0

Jakie dane chcesz wyciągnąć, jaka jest struktura bazy?
Rzeczywiście jest klucz łączący.
Wydajność.

0

korzysta z czystego JPQL (criteriaQuery hibernetowe odpadaja)

za pomoca zwyklych createQuery z JPQL nie bylam w stanie osiagnac tego co chce

chce wyciagnac id, imie, nazwisko z tabeli dane oraz ilosc tabel Dane2, ktore maja referencje do danego elementu Dane (tak ogolnie, te dane nie maja sensu, tak je wpisalam tutaj) + plus jeszcze ten warunek z where

0
createQuery(
                "SELECT r.id, r.imie, r.nazwisko," +
                        " (SELECT COUNT(*) From Dane2 re WHERE r.imie=re.imie AND r.nazwisko=re.nazwisko) ilosc"+
                         " FROM  re.dane r " +
                         " where r.s = :s and r.imie in (:lista)");
0

createQuery(
"SELECT r.id, r.imie, r.nazwisko," +
" (SELECT count(*) From nie mam pojecia co) From Dane2 re Right Join re.dane r"+
" where r.s = :s and r.imie in (:lista)" );

może tak zadziała:
createQuery(
"SELECT r.id, r.imie, r.nazwisko," +
" (SELECT count(*) From nie mam pojecia co) From Dane2 re Right Join re.dane r"+
" where r.s = :s and r.imie in (:lista)" );
Podstaw za: "nie mam pojecia co"
Dane2 rrrr where rrrr.s = :s and rrrr.imie in (:lista) and 'tutaj warunek na relacje pomiędzy tabelami' np.: rrrr.id=re.id

0

cos to nie dziala, macie moze ajkies pomysly jeszcze ?

jak myslicie, ktora wersja jest wydajniejsza z grop by , czy z dwoma selectami ?

jak to zrobic wydajniej (np. jak przerobic ta wersje z group by na wydajniejsza) ?

0

a możesz powiedzieć co ci się w group by nie podoba? Optymalizację się zaczyna od przeanalizowania planu zapytania a nie od wymyślania dziwnych konstrukcji

0

tak naprawde zapytanie wyglada tak:

createQuery(
                "SELECT r.id, r.imie, r.nazwisko, r.costam, t.costam..." +
                        " COUNT(re) From Dane2 re Right Join re.dane r"+
                         " where r.s = :s and r.imie in (:lista)" +
                       " Group By (r.id, r.imie, r.nazwisko,  r.costam, t.costam...)");

select zawiera bodajze 9 pol, a grupowanie rowniez.
W sumie to kazano mi to przerobic na podselect jesli sie da, idealnie byloby jpqlowymi criteriami, ale robiac to przez nie poleglam

1 użytkowników online, w tym zalogowanych: 0, gości: 1