Inhalt aus zwei Tabellen als Keuztabelle zusammenfassen

Gimi27

Benutzer
Beiträge
12
Hallo zusammen,

Code:
select T1.Konto,
    T2.Proj
from @tmp1 T1,
@tmp2 T2

tmp1 ist eine Menge von Kontonummern (besteht nur aus einem Feld <Konto>) und tmp2 ist eine Menge von Projektnummern (besteht ebenfalls nur aus einem Feld <Proj>). Der Select erzeugt eine Kreuztabelle mit allen möglichen Kombinationen von Konto- und Projektnummer. Soweit so gut, dies ist auch gewollt.

Jetzt habe ich aber festgestellt, wenn z.B. die Menge Projektnummern "leer" ist, dann wird als Ergebnis auch eine leere Menge ausgewiesen und nicht die Menge aller Kontonummern nur jeweils mit leerem Feldinhalt für Projektnummer. Ich verstehe zwar, dass dies logisch so sein muss, aber wie löse ich das Problem?

Vielen Dank
Michael
 
Werbung:
Code:
test=*# create table g1(i int);
CREATE TABLE
test=*# create table g2(i int);
CREATE TABLE
test=*#
test=*#
test=*# select * from g1 cross join g2;
 i | i
---+---
(0 rows)

test=*# copy g1 from stdin;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself, or an EOF signal.
>> 1
>> 2
>> 3
>> \.
COPY 3
test=*# select * from g1 cross join g2;
 i | i
---+---
(0 rows)

test=*# select * from g1 left join g2 on true;
 i | i
---+---
 1 | 
 2 | 
 3 | 
(3 rows)

test=*# copy g2 from stdin;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself, or an EOF signal.
>> 3
>> 4
>> \.
COPY 2
test=*# select * from g1 left join g2 on true;
 i | i
---+---
 1 | 3
 1 | 4
 2 | 3
 2 | 4
 3 | 3
 3 | 4
(6 rows)

test=*#

hilft das weiter?
 
Hallo Akretschmer,

ich bin mir nicht sicher, ob es weiterhilft. Zunächst noch vorab, die Stelle stammt aus einer Stored Procedure und die beiden Tabellen sind temporäre Tabellen. Ich weiß nicht, ob dies vielleicht wichtig ist.

Mit folgendem Code habe ich versucht deine Lösung nachzustellen:
Code:
declare @tmpT1 Table (i int)
declare @tmpT2 Table (i Int)

insert into @tmpT1 (i)
values (1),(2),(3)


select * from @tmpT1 left join @tmpT2 on true
Beim Ausführen bekomme ich aber die Fehlermeldung: "In der Nähe von 'true' wurde ein nicht boolescher Ausdruck in einem Kontext angegeben, in dem eine Bedingung erwartet wird."

Mit cross join bekomme ich eine leere Menge, wie erwartet.

Grüsse
Michael
 
Werbung:
Das war es halb. Ist @tmp1 leer, dann funktioniert ein left Join auch nicht. Ich komme wohl nicht darum herum vorher noch abfragen, ob und wenn ja welche Tabelle leer ist. Habe ich mir eigentlich schon gedacht. Ich hatte nur gehofft, dass es irgendeine super einfache Lösung mit einem Befehl gibt, den ich noch nicht kenne.

Trotzdem vielen Dank
 
Zurück
Oben