Come potrei riscrivere una query senza usare si unisce
-
09-09-2019 - |
Domanda
Vorrei sapere come questa query avrebbe dovuto essere scritto se non si unisce sono stati utilizzati. Ho cercato di capirlo per i casi in cui si unisce non sono vitali o non può essere utilizzato (non sono disponibili).
SELECT
*
FROM
(
table1
INNER JOIN
table2
ON
table1.id = table2.id
)
INNER JOIN
table3
ON
(
table1.id2 = table3.id2
)
AND
(
table1.id3 = table3.id3
)
WHERE
table1.id = 1
Il motivo per cui non posso usare si unisce perché l'applicazione utilizza HQL al contrario di SQL standard e HQL rende unisce incredibilmente difficile da fare.
Soluzione
E 'impossibile estrarre i dati da due tabelle diverse, senza unirsi a loro in un modo o nell'altro. Si utilizza una dichiarazione JOIN, ma si può ottenere la stessa cosa ponendolo nella clausola in cui, ad esempio:
SELECT * FROM table1, table2 WHERE table1.id = table2.id AND ...
Altri suggerimenti
Si può fare lo seleziona separati e fare i join all'interno dell'applicazione.
Se si unisce sono off limits, quindi stare lontano da database SQL.
Spesso una subquery può essere più facile di un join se solo selezionando 1 Valore
SELECT e.Name, e.HireDate, (select SUM(CheckAmount) from EmployeeCheck where EmployeeID = e.ID)
FROM Employee e
Non per essere un pureist, ma il concetto di base dei database relazionali e di normalizzazione dei dati è il join. Ci sono pochi motivi per utilizzare un database relazionale per memorizzare i dati con questa. Indici rendono questo accada in modo rapido ed efficiente.
Il vecchio modo è stato quello di utilizzare una tabella master e delle transazioni. Indietro nei secoli bui.
Tuttavia, è possibile utilizzare un cursore per fare il filtraggio che un join farebbe. Un cursore funziona come una matrice contro il tavolo piuttosto che fare un filtro join based e otterrà lo stesso risultato.
È possibile farlo con subquery correlate se si vuole, ma si unisce sta meglio.
Hibernate non impedisce di fare si unisce se si dispone di una mappatura associazione nel file di mappa di ibernazione. Si veda ad esempio: http://www.jumpingbean.co.za/blogs/mark / hibernate_hql_inner_join_on_clause
SQL senza giunti ...
SELECT * FROM table1
SELECT * FROM table2
SELECT * FROM table3
che non sta andando per aiutarvi a se.
La domanda è: qual è l'output desiderato, e quali ragioni avete per non volere un join?
Se si desidera che i dati da più tabelle in un database relazionale allora si uniranno i dati. Forse questa è una cosa che devi fare nell'applicazione come suggerito James Black.
Se si potesse fare un po 'più di luce sulla situazione anche se potremmo essere in grado di aiutare ulteriormente.