2013-06-09 4 views
5

Ho installato postgresql-9.2 sul mio computer locale (con Windows 7) e sono anche l'amministratore. Sto utilizzando lo Strumento di query di pgAdmin III per interrogare il mio database. Il mio problema è il seguente:Uscita di risultati da più query SQL in postgresql

Dire che ho due tabelle Table_A e Table_B con diverso numero di colonne. Inoltre, dire che sono dopo due query molto semplice:

select * from Table_A; 
select * from Table_B; 

voglio correre entrambe queste query e vedere l'output di tutt'e due insieme. Non mi dispiace se vedo l'output nella GUI o in un file.

Ho anche provato il comando di copia e l'output in un csv. Ma invece di accodare al file lo sovrascrive. Quindi, finisco sempre con i risultati della sola query 2. La stessa cosa succede con la GUI.

È davvero fastidioso commentare una query, eseguire l'altra, generare due file diversi e quindi unire insieme questi due file.

+0

Se le tabelle hanno la stessa struttura usa 'union' –

+1

Puoi usare' union all', riempiendo le colonne con 'null' secondo necessità. Quali sono le definizioni della tabella? –

+0

@Denis - Supponiamo che queste siano le strutture della tabella: Table_A (col_A, col_B); Table_B (col_c, col_D, col_E, col_F) – PS1

risposta

1

Il tuo problema non dipende dal client.

Assumendo tutte le colonne ad essere di tipo text, Prova questa ricerca: i nomi

SELECT col_a AS col_ac, col_b AS col_bd 
     ,NULL::text AS col_e, NULL::text AS col_f 
FROM table_a 

UNION ALL 
SELECT col_c, col_d, col_e, col_f 
FROM table_b; 

Colonna e nastri di dati sono definiti dal primo ramo di un UNION SELECT. Il resto deve essere in linea.

0

È possibile utilizzare UNION ALL, ma è necessario assicurarsi che ciascuna query secondaria abbia lo stesso numero di colonne.

SELECT 'a', 'b' 
UNION ALL 
SELECT 'c' ; 

non funziona.

SELECT 'a', 'b' 
UNION ALL 
SELECT 'c', 'd' 

funzionerà

5

Questo non è attualmente supportata da PostgreSQL - dalla documentazione (http://www.postgresql.org/docs/9.4/interactive/libpq-exec.html):

La stringa di comando può includere più comandi SQL (separati da virgola). Più query inviate in una singola chiamata PQexec vengono elaborate in un'unica transazione, a meno che nella stringa di query non siano presenti comandi BEGIN/COMMIT espliciti per suddividerli in più transazioni. Si noti tuttavia che la struttura PGresult restituita descrive solo il risultato dell'ultimo comando eseguito dalla stringa. Se uno dei comandi fallisce, l'elaborazione della stringa si interrompe e il PGresult restituito descrive la condizione di errore.