2010-07-29 5 views
14

Ich habe zwei Tabellen mit einer variablen Anzahl von Spalten. (Ich weiß nicht, wie viele Spalten oder was dort Name sein wird) zum Beispiel Tabelle A und Tabelle BSQL innere Join zwei Tabellen mit den gleichen Spaltennamen

TableA:

ID | B_ID | {variable} 

TableB

ID | {variable} 

Abfrage:

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

Wenn TableA und TableB beide eine Spalte mit demselben Namen haben, kann ich nicht zwischen den zwei verschiedenen Spalten unterscheiden. Zum Beispiel beiden Tabellen hat die Spalte „Namen“ Diese Abfrage würde in:

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

Was ich suche ein Weg zwischen den beiden Tabellen zu unterscheiden ist. Vorzugsweise mit einem Präfix für die Spaltennamen wie z.

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

Ich kenne die „AS“ Schlüsselwort, aber das Problem ist, dass ich weiß nicht, was die Spaltennamen, bevor die Hand sein werden. (Ich weiß nicht, ob TableA oder TableB werden die Spaltennamen haben)

Also meine Frage ist

Wie beurteilen Sie die Spalten zwischen den beiden Tabellen mit einem INNER JOIN unterscheiden, wenn die Tabellen der kann gleiche Spaltennamen?

Ich verwende SQLite3.

Antwort

13

Ihre Ergebnismenge (bei Ihrer Abfrage) sollte alle TabellenA Spalten gefolgt von allen TabellenB Spalten haben. Wenn Sie also die zweite ID Spalte erreichen, wissen Sie, dass Sie in den TabellenB Daten sind.

Das heißt, es würde mir seltsam erscheinen, dass Sie über die Sie alle Daten aus zwei Tabellen sind die Abfrage Sie wissen, funktionell nichts ...

+1

Klingt wie eine Art funky dynamisches SQL, das Tabellen abfragen kann, die zur Laufzeit vom Benutzer generiert werden. – FrustratedWithFormsDesigner

+3

Stimmen Sie zu, wenn Sie die Spaltennamen nicht kennen, dann stimmt etwas mit Ihrem Design nicht. Select-Anweisungen sollten niemals select * verwenden, Spaltennamen sollten immer angegeben werden, insbesondere in Join, wo die gleiche Spalte zweimal zurückgegeben wird. Dies ist eine Verschwendung von Serverressourcen. – HLGEM

+0

Wenn die Tabellen erstellt werden, haben sie Spaltennamen, die dann erfasst werden können, obwohl ... – AllenG

6

Dies ist zugegebenermaßen ein Hack Lösung, aber diese:

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

würde eine Liste von Ergebnissen, die in zwei Blöcke aufgeteilt werden würde, links und rechts neben der Spalte #.