2010-07-29 18 views
14

Ho due tabelle con una quantità variabile di colonne. (Non so quante colonne o che cosa ci nomi saranno) per esempio Tabella A e B. TabellaSQL inner join due tabelle con gli stessi nomi di colonna

TableA:

ID | B_ID | {variable} 

TableB

ID | {variable} 

Query:

SELECT TableA.*, TableB.* FROM TableA INNER JOIN TableB ON TableA.B_ID= TableB.id; 

Quando tabella e tabellaB hanno entrambi una colonna con lo stesso nome, non riesco a distinguere tra le due diverse colonne. Ad esempio di entrambe le tabelle ha la colonna "Nome" questa query si tradurrebbe in:

ID | ID | B_ID | NAME | NAME | 
1 | 35 | 35 | bob | jim | 

Quello che sto cercando è un modo per differenziare tra le due tabelle. Preferibilmente con un prefex per i nomi delle colonne come.

TableA_ID | TableB_ID | TableA_B_ID | TableA_NAME | TableB_NAME | 
     1 |  35 |   35 |   bob |   jim | 

So della "AS" parola chiave, ma il problema è che io non so che cosa i nomi delle colonne saranno prima mano. (Non so se TableA o TableB stanno per avere la colonna Nome)

Quindi la mia domanda è

Come si fa a distinguere le colonne tra le due tabelle con un'INNER JOIN quando le tabelle possono avere la stessi nomi di colonne?

Sto usando SQLite3.

risposta

13

Il set di risultati (data la tua query) dovrebbe avere tutte le colonne TableA seguite da tutte le colonne di TableB, quindi quando arrivi alla seconda colonna ID, sai di essere nei dati di TableB.

Detto questo, è sembrerebbe strano che si sta interrogando tutti i dati da due tabelle di cui si sa funzionalmente niente ...

+1

Sembra una specie di SQL dinamico funky che potrebbe eseguire query sulle tabelle generate in fase di esecuzione dall'utente. – FrustratedWithFormsDesigner

+3

D'accordo, se non si conoscono i nomi delle colonne, c'è qualcosa di grave che non va nella progettazione. Le istruzioni SELECT non dovrebbero mai usare select *, i nomi delle colonne dovrebbero essere sempre specificati in join, dove la stessa colonna viene restituita due volte, questo è uno spreco di risorse del server. – HLGEM

+0

Se le tabelle sono in fase di creazione, hanno nomi di colonne che possono essere catturati allora, sebbene ... – AllenG

6

Questa è certamente una soluzione hack, ma questo:

SELECT TableA.*, "#", TableB.* 
FROM TableA INNER JOIN TableB ON TableA.B_ID= TableB.id; 

Produrrebbe un elenco di risultati che sarebbero divisi in due blocchi, a sinistra ea destra della colonna #.

Problemi correlati