|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jan 2003
Città: Bergamo/Milano
Messaggi: 628
|
[SQL] Union dentro un With
Ho un problema con SQL e database su AS400
Devo fare una cosa del genere: with XXXX as (select NUMERO from LIBRERIA.TABELLA1 UNION select NRDOCU from LIBRERIA.TABELLA2) select * from XXXX WHERE NUMERO=1000 Ho semplificato la massimo la mia query visto che il problema sta proprio qui, mi da questo errore: "Keyword UNION not expected. Valid tokens: )." Il problema sembra essere la UNION dentro al "With XXXX as", cosa che pero' dovrebbe funzionare, ma qui con AS400 non gli piace... Sono completamente bloccato perchè dovrei fare una union su 2 tabelle, un'altra su altre 2 tabelle (sarebbero dati attuali e storici) e fare poi una join tra di loro, non conosco altri sistemi per farlo se non questo :| Helppppp
__________________
Opteron 170 RS @ 3000Mhz 1.408v - Waterblock Lunasio Cooling - DFI LanParty UT Nf4 Ultra-D - SSD Intel X25-M 80Gb 2Gb DDR Corsair (1024Mb x 2) - GeForce 8800GTS 360MB - Liquido WB Lunaforce Evo 1215 - Lc Power 550w Rev2 |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
La keyword WITH e' utile solo se occorre utilizzare la parte inserita nella with per 2 o piu' volte.
E questo sembra essere il tuo caso. Non conosco l'SQL specifico che useresti, ma proverei a proporre il seguente: Codice:
WITH xxx AS ( SELECT * FROM ( (select NUMERO from LIBRERIA.TABELLA1 UNION --- MI SA CHE VUOI METTERE "UNION ALL" select NRDOCU from LIBRERIA.TABELLA2) as tmp1 ) ) SELECT * from xxx join xxx WHERE qualcosa Spesso Il motore preferisce usare la definizione da 0 per entrambi i rami, agendo come di fatto la parte in WITH sia in realta' da intendersi come una vista temporanea, piuttosto che una tabella temporanea. E, per questo motivo, la maggior parte delle volte conviene costruire e preelaborare una vera e propria tabella in cui inserire la parte in WITH, a questo punto ben condita con indici opportuni, da poi passare alla SELECT che segue.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. Ultima modifica di gugoXX : 20-09-2009 alle 11:03. |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:30.