online 1
gast (50)

/ Forum / Datenbanken

DatenbankenDatenbanken

Fragevon hajo100 vom 18.12.2020, 21:34 Options

Abfrage über 2 Tabellen

Ich benötige Hilfe für eine Abfrage in 2 Tabellen mit unterschiedlichen Spalten.
In der Tabelle A mit 10 Spalten suche ich einen Wert in Spalte 1 und erhalte als Ergebnis alle Zeilen, in denen der Wert vorkommt. In der Spalte 2 der Tabelle A befinden sich Codes mit 5 Buchstaben in der Art DEHAM (für Hamburg) oder ITROM (für Rom).
In Tabelle B befindet sich derselbe Code allerdings aufgeteilt. In Spalte Country steht DE und in der Spalte Location HAM. In der Spalte Name befindet sich dann der Ort (Hamburg)
Das Ergebnis der Abfrage soll die entsprechenden Orte zu der Abfrage in Tabelle 1 listen und in Spalte 11
einfügen.
Ich hoffe, ich habe mich verständlich ausgedrückt.
Vielen Dank


Antwort schreiben

Antwort 1 von lorf vom 19.12.2020, 20:28 Options

Hallo hajo,
meine Variante ist:
UPDATE TabA, TabB SET TabA.SPALTE11 = TabB.Name
WHERE (TabA.codes=[TabB].[Country] & [TabB].[Location]);

wobei du für SPALTE11 deinen Namen einsetzen musst.

Vielleicht reicht das ja schon.

Gruß
lorf

Antwort 2 von hajo100 vom 20.12.2020, 10:31 Options

Hallo lorf,
Dein Weg ist anders, als ich es gedacht hatte, aber die Abfrage funktioniert prima.

Vielen Dank
Hajo

Antwort 3 von hajo100 vom 20.12.2020, 16:29 Options

Jetzt habe ich doch noch eine Bitte zu der Abfrage.
Ich möchte das Ergebnis in einer neuen Tabelle haben. Als Aktualisierung der Tabelle A funktioniert es natürlich. Diese möchte ich aber nicht verändern, genauso wenig wie Tabelle B.

Und noch was. In der Tabelle B gibt es zu dem jeweiligen Countrycode ein leeres Feld in der Spalte Location, dafür steht dann in der Spalte Name das entsprechende Land mit einem Punkt als Anfangszeichen.
Es sollte in der Abfrage neben der Spalte 11 also noch eine Spalte 12 entstehen, in der dann entsprechende Land steht.
Kann mir jemand weiterhelfen?

Antwort 4 von Jemand vom 21.12.2020, 12:01 Options

Hier ist jemand. Ich habe da noch eine Variante
SELECT TabA.spalte1 AS DERDIEDAS, 
             TabB.Name AS SPALTE11,
             (SELECT Mid([B.Name],2,Len([B.Name])) FROM TabB as B
                    WHERE (((B.Country)=Left([TabA.codes],2)) AND ((IsNull([B.Location]))<>False))  ) AS SPALTE12 
INTO TabC
FROM TabA, TabB
WHERE (((Left([codes],2))=[TabB].[Country]) AND ((IsNull([Location]))=False));

die dir alles in TabC abspeichert.

Gruß
lorf

Antwort 5 von hajo100 vom 21.12.2020, 13:54 Options

Hi lorf,
ich hatte mir jetzt nach deiner ersten Antwort eine neue Tabelle erstellt:

SELECT TabA.ID, TabA.Source, TabA.DateTime, TabA.Status, Null AS Name, Null AS Land, TabA.Codes INTO TabA_Neu
FROM TabA;

Und diese dann aktualisiert:

UPDATE TabA_Neu, TabB SET TabA_Neu.Name = [TabB].[Name]
WHERE ((([TabA_Neu].[Codes])=[TabB].[Country] & [TabB].[Location]));

Das funktioniert soweit gut.

Ich kriege es leider aber nicht hin, mir aus deiner "neuen" Variante das so hinzustricken, das es passt.
In die Spalte "Land" sollte also aus der TabB der Name rein, wenn das Kriterium erfüllt ist, das in der Spalte "Country" 2 Buchstaben drin sind und die Spalte "LOcation" leer ist.
Kannst du nochmal "basteln"?

Danke und Gruß
Hajo

Antwort 6 von lorf vom 21.12.2020, 23:00 Options

Da gibt es nichts zu stricken.
Das UPDATE nimmt man wenn man was Updaten will. Du wolltest es in eine neue Tabelle. Deshalb nahm ich SELECT ... INTO.
Damit hole ich aus Spalte1 was immer auch da drin steht.
Aus TabB kommt der Name der Stadt.
Als Drittes wird aus TabB.Name für den Fall, dass die Location Null ist und TabB.country=den 1. zwei zeichen von TabA.codes ist, das Land herausgesucht und ab dem 2. zeichen angezeigt.
So wie ich dich verstanden habe, könnte die Abfrage jetzt so aussehen, um alles in TabA_Neu zu schreiben.

SELECT TabA.ID, TabA.Source, TabA.DateTime, TabA.Status,
             TabA.spalte1 AS DERDIEDAS, 
             TabB.Name AS Name,
             (SELECT Mid([B.Name],2,Len([B.Name])) FROM TabB as B
                    WHERE (((B.Country)=Left([TabA.codes],2)) AND ((IsNull([B.Location]))<>False))  ) AS Land
INTO TabA_Neu
FROM TabA, TabB
WHERE (((Left([codes],2))=[TabB].[Country]) AND ((IsNull([Location]))=False));


Gruß
lorf

Antwort 7 von hajo100 vom 22.12.2020, 19:49 Options

Hi lorf,
ich habe die Abfrage nach ca. 20 min. abgebrochen, weil nicht abzusehen war, wie lange das dauern wird.
Vieleicht liegt es daran, das es ca, 60.000 Datensätze sind.
Ich werde mir was anderes überlen.

Vielen Dank und Gruß
Hajo

Ähnliche Themen

Tabellen
gast36  13.07.2007 - 5 Hits - 4 Antworten

Abfrage von mehreren Tabellen mit Access
KEVKAI  24.12.2007 - 119 Hits - 2 Antworten

Zu viele Tabellen bzw. Tabellenspalten für Abfrage
smileAnn  16.01.2008 - 28 Hits - 1 Antwort

Verknüpfen von Access-Tabellen mit Inhalten von Excel-Tabellen?
BugsBunny  25.01.2008 - 220 Hits - 5 Antworten

SQL Abfrage über alle Tabellen und Felder wenn Struktur nicht bekannt ist
Mindjogger  11.08.2008 - 32 Hits - 2 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026