Select und Set ?

marsi

Benutzer
Beiträge
15
Hallo liebe Experten,

ich habe hier 2 Tabellen vorliegen, wo die Spaltennamen gleich sind. Ich muss von einem linekd Server die Daten abrufen.

Tabelle1:
Spaltenname 1: Nummer
Spaltenanamen 2: Inhalt

Tabelle2 (linked dServer)
Spaltenname 1: Nummer
Spaltenanamen 2: Inhalt

Hier muss ich die Nummer (Spaltenanme 1) von Tabelle1 und Tabelle2 mit select abrufen können, wenn diese stimming sind.

Hier die Abfrage
SELECT Nummer, Inhalt, dbo.Tabelle1.Nummer, dbo.Tabelle1.Inhalt
FROM Tabelle2 LEFT JOIN Tabelle1 ON Nummer = Tabelle1.Nummer
WHERE dbo.Tabelle1.Nummer = Nummer;

Leider taucht dann diese Fehlermeldung auf --> Ambiguous column name.
Wie kann ich da einen Alias Namen für die Spaltennamen in einer Select Abfrage vergeben, wenn die Spaltennamen gleich sind ?

Bei Update habe ich folgendes schon erstellen können, aber nicht für eine select Abfrage:
UPDATE Tabelle1
SET Tabelle1.Bezeichnung = t2.Bezeichnung,
Tabelle1.Bereich = t2.Bereich
FROM Tabelle2 as t2
JOIN Tabelle1 ON t2.BV_Nr = Tabelle1.Nr;



Danke und Gruß, Marsi
 
Werbung:
Sorry, wenn ich noch nicht in der Tiefe von SQL schwimme wie Sie und kann mit solchen Aussagen leider nichts anfangen kann. Ich hätte ja nicht gefragt, wenn ich die Lösung hier gefunden hätte. Habe die SET Funktion in Select eingebaut und es hat nicht geklappt. Insofern ist dieses Forum meine Hoffnung wie ich weiterkomme. Danke.
 
Code:
test=# select id, zahl from demo where id = 1;
 id | zahl 
----+------
  1 |    1
(1 row)
test=# select id, zahl as demo_für_einen_spaltenalias from demo as demo_für_einen_tabellenalias where id = 1;
 id | demo_für_einen_spaltenalias 
----+------------------------------
  1 |                            1
(1 row)
 
SELECT Nummer, Inhalt, dbo.Tabelle1.Nummer, dbo.Tabelle1.Inhalt
FROM Tabelle2 LEFT JOIN Tabelle1 ON Nummer = Tabelle1.Nummer
WHERE dbo.Tabelle1.Nummer = Nummer;

Leider taucht dann diese Fehlermeldung auf --> Ambiguous column name.
Wie kann ich da einen Alias Namen für die Spaltennamen in einer Select Abfrage vergeben, wenn die Spaltennamen gleich sind ?
Ambiguous column name = mehrdeutiger Spaltenname, klar oder?

"Wie kann ich da einen Aliasnamen für die Spaltennamen ..vergeben..?"
Ist dann die falsche Frage.

Wenn die DB nicht weiß, welchen Spaltennamen du meinst, musst Du nicht einen eindeutigen Alias auf die Spalte vergeben (Sie wüsste dann immer noch nicht, welchem der mehrdeutigen Spaltennamen sie einen Alias geben soll)
Du musst selbst entscheiden, welchen Spaltennamen Du nutzen möchtest. Dazu musst Du die Tabelle, der gemeinten Spalte mit angeben.

Aus
SELECT Nummer, Inhalt, dbo.Tabelle1.Nummer, dbo.Tabelle1.Inhalt
FROM Tabelle2 LEFT JOIN Tabelle1 ON Nummer = Tabelle1.Nummer
WHERE dbo.Tabelle1.Nummer = Nummer;
wird dann
SELECT Tabelle2.Nummer, Tabelle2.Inhalt, dbo.Tabelle1.Nummer, dbo.Tabelle1.Inhalt
FROM Tabelle2 LEFT JOIN Tabelle1 ON Tabelle2.Nummer = Tabelle1.Nummer
(Die WHERE Clause ist überflüssig, weil sie das gleiche ausdrückt wie in der Zeile darüber die JOIN Clause. Entweder JOIN oder WHERE, um Tabellen zu verknüpfen, nicht beides. JOIN ist immer empfehlenswert dabei, weil stärker und Standard konform.

Und mit Tabellenname vor der Spalte, weiß dann die DB, welche Spalte gemeint ist.
Dabei hast Du in dem Statement nun weder einen Tabellenalias noch einen Spaltenalias genutzt! Auch klar, oder?
 
P.S.:
Deine Frage, also die Überschrift hat überhaupt nichts mit dem Problem zu tun.
Das Prinzip von Aliasen bzw. mehrdeutigen Spaltennamen ist in beiden Fällen gleich, für Select sowie für Update. (Und auch Mischformen von beidem)
"Set" nennt man es im Übrigen eher nicht, sondern "Update".

(Vielleicht kann man (Du) die Überschrift noch ändern.
 
Danke, das Problem ist bei einem Linked Server (Tabelle2), der hier wie folgt aufgerufen wird: [DB-F-XY\Daten].Tabelle2
Die Abfrage akzeptiert hier kein Tabellenname vor der Spalte, d.h. [DB-F-XY\Daten].Tabelle2 .Nummer kann ich so nicht eingeben.
Dann erscheint die Fehlermeldung :The multi-part identifier "Tabelle2" could not be bound.

Insofern bin ich leider nicht weitergekommen.
 
Tja, wie schon gesagt:
- bei einem Tablealias sind wir noch gar nicht angekommen
- Aliase sind in Select und Update gleich einsetzbar

Dass Du im Beitrag Nr.8 erst das eigentliche Problem nennst und einem aufmerksamen Forenmitglied, das Dich auf die bereits bekannten Probleme aus Deinem eigenen Thread hinweißt, nur lapidar antwortest, dass Du damit nichts anfangen kannst, wirkt gelinde gesagt etwas bequem.

Also schau Dir bitte noch mal die Lösung von @castorp aus dem anderen Thread von Dir an und versuch es damit.
 
Zuletzt bearbeitet:
Lieben Dank für die Rückmeldung. Sorry, wenn dies bei Euch als etwas zu "bequem" ankommen sollte. Dies sollte echt so nicht rüberkommen. Sehe momentan halt den Wald vor lauter Bäumen nicht. Vielleicht habe ich die Alias Funktion noch nicht so richtig verstanden, wie es korrekt eingesetzt wird. Hatte dies nämlich mit der Ursprungshilfe schon so umgesetzt:

Select *
SET Tabelle1.Nummer = t2.Nummer
FROM [DB-F-XY\Daten].Tabelle2 as t2
JOIN Tabelle1 ON t2.Nummer = Tabelle1.Nummer;

Das hat so leider nicht geklappt und deswegen habe ich dies nochmal gepostet. Mache für heute erstmal Schluß und werde das Thema morgen nochmal angehen. Trotzdem Danke für euren bisherigen Input. Möchte ungern weiterhin eure kostbare Zeit in Anspruch nehmen.
 
Select *
SET Tabelle1.Nummer = t2.Nummer
FROM [DB-F-XY\Daten].Tabelle2 as t2
JOIN Tabelle1 ON t2.Nummer = Tabelle1.Nummer;
Das ist ein ungültiges Statement. Hier wird ein Select Statement mit der Set Clause eines Updates vermischt.
Dabei sollten andere Fehlermeldungen (die es immer zu beachten lohnt) auftreten, als bei der (fehlenden) Nutzung eines Alias auf eine (Linked) Table.
Du wirfst einiges durcheinander und ein Spaziergang oder sowas ist wahrscheinlich keine schlechte Idee.
Ein Tutorial zur Nutzung von Aliasen ist bestimmt auch nicht verkehrt.

Ein Alias ist nichts weiter als ein "Spitzname" für eine Tabelle oder eine Spalte oder einen Ausdruck. Keine große Sache. Kannst Du nach Belieben definieren, wenn Du möchtest oder musst (wie in Deinem Fall).

Code:
select nrw.strasse, nrw.stadt
  (Select adresse.[BlöderSpaltenname DenMeinKollegeSichausgedachtHat] as strasse, adresse.stadt
     from [住所] as adresse 
  where adresse.Bundesland = 'NRW' ) as nrw
 
Danke. Komme leider immer noch nicht ganz weiter. Könnt ihr mir einen Tipp geben, wo ich dieses Tutorial zur Nutzung von Aliasen online sehen kann. Danke nochmal.
 
Danke für eute Hilfe, bzw. Input. :) Habe das Problem jetzt lösen können. Der Hinweis auf die Seite von dabadepdu --> Aliase in SQL – Unersetzliche kleine Helfer hat mir geholfen. Bin jetzt so vorgegangen:
SELECT c.Nummer,
c.Inhalt,
a.Nummer,
a.Inhalt
FROM Tabelle1 AS c
INNER JOIN Tabelle2 AS a
on c.Kst = a.Kst;

Euch allen ein schönes Wochenende.
 
Werbung:
Habe das Problem jetzt lösen können
👍
SELECT c.Nummer,
c.Inhalt,
a.Nummer,
a.Inhalt
FROM Tabelle1 AS c
INNER JOIN Tabelle2 AS a
on c.Kst = a.Kst;
Das AS steigert die Übersicht, kann aber weggelassen werden. Und Deine linked Table ist gar nicht in Deinem Select Statement zu sehen. Ohne linked Table wie hier, ist auch ein Tablealias nicht nötig, nur hübscher und praktischer (kürzer).
 
Zurück
Oben