2010-11-24 7 views
0

Sagen wir, ich habe zwei Tische.Postgresql: Wie Sie Tabelle für Zeile concat?

FIRST_TAB 
ID NAME 
=========== 
1 a 
2 b 

und

SECOND_TAB 
ID NAME 
=========== 
3 c 
4 d 

Gibt es eine Möglichkeit Ansicht/neue Tabelle zu machen, so dass ich eine Abfrage wie dies tun könnte? (Meine realen Daten haben etwa 23 Tabellen, keine Duplikate, alle haben die gleiche Spalte).

SELECT * FROM NEWVIEW; 
ID NAME OPTIONAL 
================== 
1 a  FIRST_TAB 
2 b  FIRST_TAB 
3 c  SECOND_TAB 
4 d  SECOND_TAB 

Antwort

5

Verwendung:

CREATE OR REPLACE VIEW newview AS 
    SELECT a.id, 
     a.name, 
     'FIRST_TAB' AS optional 
    FROM FIRST_TAB a 
    UNION ALL 
    SELECT b.id, 
     b.name, 
     'SECOND_TAB' AS optional 
    FROM FIRST_TAB b 

Die optionale Spalte ist eine statische Zeichenfolge in dem Sie festlegen können, was Sie brauchen, keine Sonderzeichen angenommen.

ist schneller als mit UNION, weil es keine Duplikate entfernt. Wenn Du Duplikate entfernen musst, entferne einfach das Schlüsselwort "ALL" (ich glaube, dass der optional Spaltenwert aus der frühesten der unionierten Anweisungen stammt, wo die Duplikate erscheinen).

Referenz:

+0

ah danke, abschöpfen ich durch ihn, aber irgendwie ist es vermissen. Ist Platzhalter hier verfügbar? Ich habe viel Spalte. –

+0

@Tg: Das können Sie, aber es wird nicht empfohlen, da UNION-Anweisungen die Datentypen an jeder Ordinalposition in der Ergebnismenge abgleichen müssen. IE: ID ist INT, die erste Spalte jeder nachfolgenden UNION-Abfrage muss eine INT sein. Wenn sich die Spaltenreihenfolge ändert, sind Sie in Schwierigkeiten. –