emeriks
Goto Top

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
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 *
...
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 ...
SELECT
  *, 
  Tabelle2.Käse AS Schlechter_Käse
.....
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.

Content-Key: 479709

Url: https://administrator.de/contentid/479709

Ausgedruckt am: 28.03.2024 um 17:03 Uhr

Mitglied: 140447
140447 31.07.2019 aktualisiert um 10:25:00 Uhr
Goto Top
Mitglied: emeriks
emeriks 31.07.2019 um 10:36:00 Uhr
Goto Top
Zitat von @140447:
Danke, aber das ist keine Lösung. Da muss man auch die Spalten einzeln angeben, nur anders.
Mitglied: 140447
140447 31.07.2019 aktualisiert um 10:38:14 Uhr
Goto Top
Zitat von @emeriks:

Zitat von @140447:
Danke, aber das ist keine Lösung. Da muss man auch die Spalten einzeln angeben, nur anders.
Nein du musst nur die zu exkludierenden Spalten angeben.
Mitglied: emeriks
emeriks 31.07.2019 um 10:38:00 Uhr
Goto Top
Zitat von @140447:
Nein.
Nein, was?
Mitglied: 140447
140447 31.07.2019 um 10:38:20 Uhr
Goto Top
s.o.
Mitglied: emeriks
emeriks 31.07.2019 um 10:40:19 Uhr
Goto Top
Zitat von @140447:
s.o.
Da ist bei mir die Zimmerdecke ... face-wink
Könntest Du mir vielleicht noch einen Wink geben, welche Stelle in dem o.g. Artikel Deiner Meinung nach einen Lösung für meine Frage wäre?
Mitglied: Bitboy
Bitboy 31.07.2019 um 11:54:42 Uhr
Goto Top
Zitat von @emeriks:

Nach allem was man so liest gibts dafür keine Möglichkeit aber eventuell klappts so:

Ich habe versucht ...
> SELECT
>   *, 
>   Tabelle2.Käse AS Schlechter_Käse
> .....
> 
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.

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
Mitglied: emeriks
emeriks 31.07.2019 um 12:30:55 Uhr
Goto Top
Zitat von @Bitboy:
Im Result hast du nun zwar 4 Käse spalten, aber kannst die beiden benötigten eindeutig ansprechen.
Schön isses halt nicht
Ja, so mache ich es im Moment auch.
Mitglied: TheJoker2305
TheJoker2305 02.08.2019 um 14:15:46 Uhr
Goto Top
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:

	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
Mitglied: MadMax
MadMax 05.08.2019 um 18:33:35 Uhr
Goto Top
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:
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
Mitglied: emeriks
emeriks 05.08.2019 um 20:00:23 Uhr
Goto Top
Zitat von @MadMax:
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.
Ja, das haben wir doch hier schon geschrieben.
Mitglied: MadMax
MadMax 05.08.2019 um 21:54:08 Uhr
Goto Top
Echt jetzt? Und wo? Hier oben drüber jedenfalls nicht. Naja, das Skript vom Joker erzeugt auch so ein select. Aber ist auch wurscht.
Mitglied: emeriks
emeriks 06.08.2019 um 07:35:03 Uhr
Goto Top
Schon in meiner Frage. face-wink