MS SQL - SELECT mit INNER JOIN und doppelten Spaltennamen
Hi,
wenn man im SQL mit "INNER JOIN" verknüpfte Tabellen abfragt, und diese Tabellen haben teilweise die gleichen Spaltennamen, dann kann man diesen Spalten Aliase geben.
z.B. mit
Meine Frage:
Wenn man 2 Tabellen verknüpft, welche je 20 Spalten haben, wovon aber nur ein Spaltenname doppelt ist, und man alle 40 Spalten als Ausgabe benötigt, dann müsste man meines Wissens hinter dem SELECT jede einzelne Spalte namentlich erwähnen, um dann bei den doppelten Namen mit AS einen Alias angeben zu können.
Ist das korrekt?
Wenn nein, wie könnte man das vereinfachen?
Wenn ich einfach nur
abfrage, dann habe ich die Spalte "Käse" 2x und ich weiß nicht, wie ich diese dann eindeutig mit .Net ansprechen kann.
Ich habe versucht ...
doch dann erscheint die Spalte "Käse" immer noch 2x, plus eine Spalte "Schlechter_Käse".
Wie bekomme ich die 2. Spalte "Käse" weg?
E.
wenn man im SQL mit "INNER JOIN" verknüpfte Tabellen abfragt, und diese Tabellen haben teilweise die gleichen Spaltennamen, dann kann man diesen Spalten Aliase geben.
z.B. mit
SELECT
Tabelle1.Käse AS Guter_Käse,
Tabelle2.Käse AS Schlechter_Käse
FROM
Tabelle1
INNER JOIN
Tabelle2 ON Tabelle2.Tab1_ID = Tabelle1.ID
Meine Frage:
Wenn man 2 Tabellen verknüpft, welche je 20 Spalten haben, wovon aber nur ein Spaltenname doppelt ist, und man alle 40 Spalten als Ausgabe benötigt, dann müsste man meines Wissens hinter dem SELECT jede einzelne Spalte namentlich erwähnen, um dann bei den doppelten Namen mit AS einen Alias angeben zu können.
Ist das korrekt?
Wenn nein, wie könnte man das vereinfachen?
Wenn ich einfach nur
SELECT *
...
Ich habe versucht ...
SELECT
*,
Tabelle2.Käse AS Schlechter_Käse
.....
Wie bekomme ich die 2. Spalte "Käse" weg?
E.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 479709
Url: https://administrator.de/forum/ms-sql-select-mit-inner-join-und-doppelten-spaltennamen-479709.html
Ausgedruckt am: 09.04.2025 um 07:04 Uhr
13 Kommentare
Neuester Kommentar

Zitat von @emeriks:
Nein du musst nur die zu exkludierenden Spalten angeben.Zitat von @140447:
Danke, aber das ist keine Lösung. Da muss man auch die Spalten einzeln angeben, nur anders.
s.o.
Nach allem was man so liest gibts dafür keine Möglichkeit aber eventuell klappts so:
Ich habe versucht ...
doch dann erscheint die Spalte "Käse" immer noch 2x, plus eine Spalte "Schlechter_Käse".
Wie bekomme ich die 2. Spalte "Käse" weg?
E.
> SELECT
> *,
> Tabelle2.Käse AS Schlechter_Käse
> .....
>
Wie bekomme ich die 2. Spalte "Käse" weg?
E.
Daraus machst du:
> SELECT
> *,
> Tabelle2.Käse AS Schlechter_Käse,
> Tabelle1.Käse AS Guter_Käse
>
Im Result hast du nun zwar 4 Käse spalten, aber kannst die beiden benötigten eindeutig ansprechen.
Schön isses halt nicht
Hallo zusammen,
es sollte zwar einfach sein, aber ein EXCLUDE UNGEWÜNSCHTE Spalte ist nicht direkt möglich.
Hiermit sollte es jedoch gehen. an den entsprechenden Stellen muss nur für TABELLE1, TABELLE2, und NAME_DER_AUSZULASSENDEN_SPALTE der entsprechende Objektname angegeben werden:
Greetz
thejoker2305
es sollte zwar einfach sein, aber ein EXCLUDE UNGEWÜNSCHTE Spalte ist nicht direkt möglich.
Hiermit sollte es jedoch gehen. an den entsprechenden Stellen muss nur für TABELLE1, TABELLE2, und NAME_DER_AUSZULASSENDEN_SPALTE der entsprechende Objektname angegeben werden:
Declare @val Varchar(MAX);
Declare @sql Varchar(MAX);
select @val = COALESCE(@val + ', b.' + column_name,column_name)
From INFORMATION_SCHEMA.COLUMNS where
TABLE_NAME = 'TABELLE2'
and column_name != 'NAME_DER_AUSZULASSENDEN_SPALTE'
set @sql = 'select
a.*,'+@val+'
from
TABELLE1 a
inner join
TABELLE2 b on a.TAB1_ID = b.TAB2_ID'
exec (@sql)
Greetz
thejoker2305
Hallo emeriks,
ganz vereinfachen kann man das nicht, aber Du kannst Dir 20 von Deinen 40 Spalten in der Auflistung sparen, wenn Du eine Tabelle mit * liest und nur für die zweite die Namen einzeln auflistest. Also:
Dann hast Du zwar nicht Guter_Käse und Schlechter_Käse, aber immerhin zwei eindeutige Käse-Spalten.
Gruß, Mad Max
ganz vereinfachen kann man das nicht, aber Du kannst Dir 20 von Deinen 40 Spalten in der Auflistung sparen, wenn Du eine Tabelle mit * liest und nur für die zweite die Namen einzeln auflistest. Also:
SELECT
Tabelle1.*,
Tabelle2.Käse AS Schlechter_Käse,
Tabelle2.Spalte1,
Tabelle2.Spalte2,
...
FROM
Tabelle1
INNER JOIN
Tabelle2 ON Tabelle2.Tab1_ID = Tabelle1.ID
Dann hast Du zwar nicht Guter_Käse und Schlechter_Käse, aber immerhin zwei eindeutige Käse-Spalten.
Gruß, Mad Max