online 1
gast (50)

/ Forum / Datenbanken

DatenbankenDatenbanken

Fragevon Booyeoo vom 18.04.2019, 11:40 Options

MS-SQL Abfrage Access 2003 2 Tabellen vergleichen und anhand von Vergleich updaten

Hallo Zusammen,

Ich habe folgendes Problem. Kann mir jemand helfen?

2 Tabellen. User und User_Mobile

Ich möchte in der Tabelle User die Spalte bei den Usern updaten dessen User.Login und der User_Mobile.MobLogin übereinstimmen.

Genauer:
User:
Login --- Mobile? --- Nocheinespalte --- nocheine ---

Anton --- checkbox.leer --- egal --- egal
Berta --- checkbox.leer --- egal --- egal

User_Mobile:
MobLogin --- irgendwas --- spalte2 --- weiterespalte
Anton --- x --- y --- z


Ziel: Bei den Namen die in beiden Tabellen da sind, soll ein Häckchen bei Mobile hin.
User:
Anton --- checkbox.voll --- egal --- egal
Berta --- checkbox.leer --- egal ---egal


Bisher:
UPDATE [User] SET Mobile_User = TRUE
WHERE [User].Login = [User_Mobile].MobLogin

Das Problem ist, Access fragt mich nach der Ausführung immer nach einer Bestimmt Id, d.h. ich kann dann immer nur einen User abgleichen aber der soll das für alle machen. Immerhin klappt das mit dem TRUE setzen. :-/

Danke für jede Hilfe


Antwort schreiben

Antwort 1 von Teddy7 vom 18.04.2019, 12:02 Options

Warum nutzt Du nicht den Abfrage-Assistenten in Access ?

Einfach eine Abfrage machen, in der beide Tabellen enthalten sind und über den User miteinander verknüpft sind.
Die Verknüpfungsart so einstellen, dass nur die User kommen, die in beiden Tabellen da sind.
Dann aus dieser Abfrage eine Aktualisierungsabfarge machen, in der der Haken gesetzt wird.
Gruß
Teddy

Antwort 2 von erik vom 19.04.2019, 15:09 Options

Hallo,

die von Teddy7 angesprochene Lösung dürfte als SQL so aussehen:

UPDATE [User] INNER JOIN [User_Mobile] ON [User].Login = [User_Mobile].MobLogin
SET Mobile_User = True;


Gruß
erik

Antwort 3 von Booyeoo vom 19.04.2019, 19:53 Options

Jop, danke Erik, hatte es davor auch schon so hinbekommen:

UPDATE [User] SET Mobile_User = TRUE
WHERE [User].Login IN (
SELECT [User].Login
FROM [User_Mobile] INNER JOIN [User] ON [User_Mobile].MobLogin = User.Login
);

Ich musste jedoch danach noch eine SET Anweisung hinzufügen, aber ich verstehe nicht wieso es bei einer version klappt bei der anderen nicht...

geht nicht:
UPDATE [User] SET Mobile_User = TRUE, Mobile_Client_Enddate = [User_Mobile].Enddate
WHERE [User].Siebel_Login IN (
SELECT User.Siebel_Login
FROM User_Mobile INNER JOIN [User] ON User_Mobile.Siebel_Login = User.Siebel_Login
);

geht:
UPDATE [User] INNER JOIN [User_Mobile] ON [User].Siebel_Login = [User_Mobile].Siebel_Login
SET Mobile_User = True, Mobile_Client_Enddate = [User_Mobile].Enddate;


Liegt es daran, dass im Unteren Teil die "Endtabelle" schon zur verfügung steht in der etwas geändert werden soll?
Jedenfalls vielen Dank an euch beide Erik und Teddy, jetzt bin ich in meinem MS SQL ein bissel weiter.

Antwort 4 von erik vom 20.04.2019, 09:12 Options

Hallo,

auf Anhieb kann ich gerade nicht erkennen, warum die eine Abfrage nicht funktionieren sollte. Wenn du die aufgetretene Fehlermeldung mal nennen könntest, wäre das schon hilfreich.

Unabhängig davon ist die Verwendung der IN-Klausel hier komplett überflüssig. In erster Linie werden in Access Beziehungen über JOIN-Ausdrücke erstellt (INNER JOIN, LEFT JOIN, RIGHT JOIN). Im Abfrageentwurf siehst du dann auch eine schwarze Linie als Beziehung zwischen den Tabellen.

Die Variante mit IN funktioniert zwar grundsätzlich auch, aber man muss dabei bedenken, dass für jeden Datensatz in der übergeordneten Abfrage die im IN-Block genannte Abfrage immer wieder ausgeführt wird! Das kann u.U. zu erheblichen Geschwindigkeitseinbußen führen, wenn die untergeordnete Abfrage große Datenmengen bewältigen muss. Um das zu vermeiden, sollte man möglichst nur JOIN-Ausdrücke verwenden. Du solltest daher nur die zuletzt erwähnte Abfrage aus deinem letzten Beitrag verwenden.

Gruß
erik

Antwort 5 von Boo2 vom 20.04.2019, 09:54 Options

Es kommt keine Fehlermeldung in dem Sinne, nur er will immer dann einen Parameter bekommen.

Antwort 6 von erik vom 20.04.2019, 12:02 Options

Bei einer unerwarteten Parameterabfrage ist einer der Tabellen- oder Feldnamen falsch geschrieben. In dem Parameterdialog wird dir der falsch geschriebene Name sogar angezeigt.

Antwort 7 von erik vom 20.04.2019, 12:11 Options

Ei, ist doch klar!

Bei der nicht funktionierenden Abfrage willst du die Tabelle [User] aktualisieren:

UPDATE [User]


Dort soll dieses Feld neu geschrieben werden:

Mobile_Client_Enddate = [User_Mobile].Enddate


Das Feld Enddate gehört in die Tabelle [User_Mobile] und nicht in [User]. In deiner Ergebnismenge ist aber [User_Mobile] nicht enthalten. Also wird das Feld Parameter abgefragt.

Das die Felder in der untergeordneten Abfrage vorhanden sind, spielt hier keine Rolle. Was in der IN-Klausel passiert, ist in der Hauptabfrage nicht sichtbar und nicht erreichbar. Daher solltest du nur richtige JOIN-Ausdrücke verwenden, denn dann stehen alle Felder der daran beteiligten Tabellen zur Verfügung.

Antwort 8 von Booyeoo vom 20.04.2019, 16:58 Options

Mist, so einfach kanns sein. Hast recht, vielen Dank für Deine Hilfe und Deine Mühe Erik. Das nenn ich Support. Mir ist das auch mit dem Geschwindigekitsverlust aufgefallen, daher immer besser Join ausdrücke verdwenden, wenns geht. ;-)

Ähnliche Themen

Access Bericht mit mehreren Abfragen
golo108  19.01.2007 - 293 Hits - 7 Antworten

2 Tabellen vergleichen + Übereinstimmung auswerfen
depe  28.08.2007 - 169 Hits - 3 Antworten

Excel Abfrage mit Verknüpfung von Daten aus 2 Mappen
willymo  29.10.2007 - 336 Hits - 6 Antworten

Altersberechnung mit Access 2003
klicki  04.04.2008 - 113 Hits - 1 Antwort

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:Mon Jan 26 01:23:17 2026