SQL-Server abfrage mit 2 Tabellen mit gleichem Spaltennamen
Moin Leute,
hab nen kleinen Problem. Habe hier eine Datenbank (SQL Server 2005) am laufen und soll jetzt eine Abfrage aus 2 Tabellen erstellen, die Daten aus beiden Tabellen enthält.
Die Tabellen haben den gleichen Aufbau und auf die selben Spaltennamen. Wenn ich jetzt mit einem Komma die 2 Tabelle in die "From" abfrage einbaue kriege ich aber den Fehler das die Spaltennamen doppelt vorhanden sind.
Dies ist die Ausgangsabfrage:
SELECT [tn_id]
,[tm_ktxt]
,[tp_name] + ' ' + [tp_vorname] Mitarbeiter
,[tn_von]
,[tn_bis]
,[tn_ag]
,[tn_artikel]
,[tn_kd]
,[tn_sd]
,[tn_anr]
,[tn_spanung]
,[tn_stksoll]
,[tn_stkist]
,[tn_laufzeit]
,[tn_bemerkung]
FROM [jasper].[dbo].[ttknachweis] join [jasper].[dbo].[ttkpersonal] on [tn_pnr] = [tp_pnr]
left outer join [jasper].[dbo].[ttkmaschinen] on [tn_mnr] = [tm_mnr]
WHERE
isnull([tn_artikel], '') LIKE $P{artikelNr}
AND $X{IN, ttknachweis.tn_pnr, personalNr_m}
AND isnull([tn_anr], '') LIKE $P{auftragsNr}
AND [tn_von] >= $P{datumVon}
AND [tn_bis] <= $P{datumBis}
AND $X{IN, ttknachweis.tn_mnr, inclMaschinen}
AND $X{NOTIN, ttknachweis.tn_mnr, exclMaschinen}
AND $X{IN, ttknachweis.tn_ag, inclAG}
ORDER BY
DATEPART ( yyyy , [tn_von] ) ASC, DATEPART ( mm , [tn_von] ) ASC, DATEPART ( dd , [tn_von] ) ASC,
Mitarbeiter ASC,
[tn_von] ASC
Und so würde ich es machen:
SELECT [tn_id]
,[tm_ktxt]
,[tp_name] + ' ' + [tp_vorname] Mitarbeiter
,[tn_von]
,[tn_bis]
,[tn_ag]
,[tn_artikel]
,[tn_kd]
,[tn_sd]
,[tn_anr]
,[tn_spanung]
,[tn_stksoll]
,[tn_stkist]
,[tn_laufzeit]
,[tn_bemerkung]
FROM [jasper].[dbo].[ttknachweis],[jasper].[dbo].[ttknachweis_z] join [jasper].[dbo].[ttkpersonal] on [tn_pnr] = [tp_pnr]
left outer join [jasper].[dbo].[ttkmaschinen] on [tn_mnr] = [tm_mnr]
WHERE
isnull([tn_artikel], '') LIKE $P{artikelNr}
AND $X{IN, ttknachweis.tn_pnr, personalNr_m}
AND isnull([tn_anr], '') LIKE $P{auftragsNr}
AND [tn_von] >= $P{datumVon}
AND [tn_bis] <= $P{datumBis}
AND $X{IN, ttknachweis.tn_mnr, inclMaschinen}
AND $X{NOTIN, ttknachweis.tn_mnr, exclMaschinen}
AND $X{IN, ttknachweis.tn_ag, inclAG}
ORDER BY
DATEPART ( yyyy , [tn_von] ) ASC, DATEPART ( mm , [tn_von] ) ASC, DATEPART ( dd , [tn_von] ) ASC,
Mitarbeiter ASC,
[tn_von] ASC
Aber irgendwie klappt das nicht.
Könnt ihr mir helfen?
Danke und MFG Tobi
hab nen kleinen Problem. Habe hier eine Datenbank (SQL Server 2005) am laufen und soll jetzt eine Abfrage aus 2 Tabellen erstellen, die Daten aus beiden Tabellen enthält.
Die Tabellen haben den gleichen Aufbau und auf die selben Spaltennamen. Wenn ich jetzt mit einem Komma die 2 Tabelle in die "From" abfrage einbaue kriege ich aber den Fehler das die Spaltennamen doppelt vorhanden sind.
Dies ist die Ausgangsabfrage:
SELECT [tn_id]
,[tm_ktxt]
,[tp_name] + ' ' + [tp_vorname] Mitarbeiter
,[tn_von]
,[tn_bis]
,[tn_ag]
,[tn_artikel]
,[tn_kd]
,[tn_sd]
,[tn_anr]
,[tn_spanung]
,[tn_stksoll]
,[tn_stkist]
,[tn_laufzeit]
,[tn_bemerkung]
FROM [jasper].[dbo].[ttknachweis] join [jasper].[dbo].[ttkpersonal] on [tn_pnr] = [tp_pnr]
left outer join [jasper].[dbo].[ttkmaschinen] on [tn_mnr] = [tm_mnr]
WHERE
isnull([tn_artikel], '') LIKE $P{artikelNr}
AND $X{IN, ttknachweis.tn_pnr, personalNr_m}
AND isnull([tn_anr], '') LIKE $P{auftragsNr}
AND [tn_von] >= $P{datumVon}
AND [tn_bis] <= $P{datumBis}
AND $X{IN, ttknachweis.tn_mnr, inclMaschinen}
AND $X{NOTIN, ttknachweis.tn_mnr, exclMaschinen}
AND $X{IN, ttknachweis.tn_ag, inclAG}
ORDER BY
DATEPART ( yyyy , [tn_von] ) ASC, DATEPART ( mm , [tn_von] ) ASC, DATEPART ( dd , [tn_von] ) ASC,
Mitarbeiter ASC,
[tn_von] ASC
Und so würde ich es machen:
SELECT [tn_id]
,[tm_ktxt]
,[tp_name] + ' ' + [tp_vorname] Mitarbeiter
,[tn_von]
,[tn_bis]
,[tn_ag]
,[tn_artikel]
,[tn_kd]
,[tn_sd]
,[tn_anr]
,[tn_spanung]
,[tn_stksoll]
,[tn_stkist]
,[tn_laufzeit]
,[tn_bemerkung]
FROM [jasper].[dbo].[ttknachweis],[jasper].[dbo].[ttknachweis_z] join [jasper].[dbo].[ttkpersonal] on [tn_pnr] = [tp_pnr]
left outer join [jasper].[dbo].[ttkmaschinen] on [tn_mnr] = [tm_mnr]
WHERE
isnull([tn_artikel], '') LIKE $P{artikelNr}
AND $X{IN, ttknachweis.tn_pnr, personalNr_m}
AND isnull([tn_anr], '') LIKE $P{auftragsNr}
AND [tn_von] >= $P{datumVon}
AND [tn_bis] <= $P{datumBis}
AND $X{IN, ttknachweis.tn_mnr, inclMaschinen}
AND $X{NOTIN, ttknachweis.tn_mnr, exclMaschinen}
AND $X{IN, ttknachweis.tn_ag, inclAG}
ORDER BY
DATEPART ( yyyy , [tn_von] ) ASC, DATEPART ( mm , [tn_von] ) ASC, DATEPART ( dd , [tn_von] ) ASC,
Mitarbeiter ASC,
[tn_von] ASC
Aber irgendwie klappt das nicht.
Könnt ihr mir helfen?
Danke und MFG Tobi
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 124087
Url: https://administrator.de/forum/sql-server-abfrage-mit-2-tabellen-mit-gleichem-spaltennamen-124087.html
Ausgedruckt am: 21.02.2025 um 10:02 Uhr
2 Kommentare
Neuester Kommentar
Hallo Tobi,
du solltest mit Aliasen bei den Tabellen arbeiten. Woher soll das Datenbanksystem denn sonst wissen aus welcher Tabelle du das Feld haben willst?
Beispiel:
Tab Personal mit feldern name,vorname,personalnr
Tab Urlaub mit feldern utage,personalnr (enthält die einzelnen genommenen Urlaubstage)
--- > ist nur ein dummes Beispiel
Jetzt willst du dir alle Mitarbeiter mit der Summe der genommen Urlaubtage ausgeben lassen.
select p.vorname,p.name,sum(u.utage) from personal p
left outer join urlaub u
on p.personalnr=u.personalnr
group by p.vorname,p.name
z.B. statt:
FROM [jasper].[dbo].[ttknachweis], [jasper].[dbo].[ttknachweis_z] join [jasper].[dbo].[ttkpersonal] on [tn_pnr] = [tp_pnr]
left outer join [jasper].[dbo].[ttkmaschinen] on [tn_mnr] = [tm_mnr]
so
FROM [jasper].[dbo].[ttknachweis] alias1, [jasper].[dbo].[ttknachweis_z] alias2 join [jasper].[dbo].[ttkpersonal] alias3 on alias2.[tn_pnr] = alias3.[tp_pnr]
left outer join [jasper].[dbo].[ttkmaschinen] alias4 on alias2.[tn_mnr] = alias4.[tm_mnr]
du solltest mit Aliasen bei den Tabellen arbeiten. Woher soll das Datenbanksystem denn sonst wissen aus welcher Tabelle du das Feld haben willst?
Beispiel:
Tab Personal mit feldern name,vorname,personalnr
Tab Urlaub mit feldern utage,personalnr (enthält die einzelnen genommenen Urlaubstage)
--- > ist nur ein dummes Beispiel
Jetzt willst du dir alle Mitarbeiter mit der Summe der genommen Urlaubtage ausgeben lassen.
select p.vorname,p.name,sum(u.utage) from personal p
left outer join urlaub u
on p.personalnr=u.personalnr
group by p.vorname,p.name
z.B. statt:
FROM [jasper].[dbo].[ttknachweis], [jasper].[dbo].[ttknachweis_z] join [jasper].[dbo].[ttkpersonal] on [tn_pnr] = [tp_pnr]
left outer join [jasper].[dbo].[ttkmaschinen] on [tn_mnr] = [tm_mnr]
so
FROM [jasper].[dbo].[ttknachweis] alias1, [jasper].[dbo].[ttknachweis_z] alias2 join [jasper].[dbo].[ttkpersonal] alias3 on alias2.[tn_pnr] = alias3.[tp_pnr]
left outer join [jasper].[dbo].[ttkmaschinen] alias4 on alias2.[tn_mnr] = alias4.[tm_mnr]