UPDATE ... SET ... WHERE funktioniert nicht / Unknown column

awiller

Grünschnabel
Hallo zusammen, :)

ich versuche grade eine einfache SQL-Abfrage zusammenzubasteln.

Die Abfrage soll später daran beteiligt sein, zwei Tabellen zu vergleichen und ggf. aufgetretene Änderungen anzugleichen.

Bisher ist der Stand folgender:

Code:
UPDATE mobile.stellen 
SET mobile.stellen.latlon_changed = 1
WHERE (mobile.stellen.prev_country <> mand1.job.einsatzort OR mand1.job.einsatzplz <> mobile.stellen.prev_zip)

Wenn ich die Abfrage mit der MySQL Workbench ausführe bekomme ich jedoch immer folgende Fehlermeldung:

Unknown column 'mand1.job.einsatzort' in 'where clause'.

Was mache ich dabei falsch, so kompliziert ist das bisher ja nicht wirklich... :rolleyes:?

Danke im Vorraus,

Alex
 
Hi und Willkommen bei tutorials,de

offensichtlich existiert die SPalte einsatzort nicht. Poste mal den Output von

SQL:
SHOW CREATE TABLE mand1.job;

Best regards
 
Hi.

Ein Update verarbeitet sukzessive alle Zeilen einer Tabelle. Du kannst dich bei diesem Update nicht einfach auf x-beliebige Spalten einer anderen Tabelle beziehen. Wie sollte das RDBM wissen in welchem Zusammenhang diese zur aktuellen Tabelle stehen?

Du müßtest vermutlich erstmal ein Join machen und mit Subselects arbeiten. Dann wäre vermutlich diese Vorgehensweise nicht gerade die effizienteste...

Gruß
 
Dankeschön erstmal,

bei der SQL-Abfrage kommt das heraus (einige nicht-relevante Spalten entfernt):

'CREATE TABLE `job` (
`einsatzort` varchar(255) collate utf8_unicode_ci default NULL,
`einsatzplz` varchar(255) collate utf8_unicode_ci default NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uuid` (`uuid`),
KEY `wp_mandnr` (`mandnr`),
KEY `wp_geschst` (`geschst`),
KEY `wp_branchenid` (`branchenid`)
) ENGINE=InnoDB AUTO_INCREMENT=1163 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci'


Die Spalte existiert also schon...

Folgende Abfrage funktioniert übrigens
Code:
UPDATE mobile.stellen 
SET mobile.stellen.latlon_changed = 1
WHERE (mobile.stellen.prev_country = 1)

Wenn ich an Stelle der mobile.stellen-Spalte jedoch die Spaltenbezeichnung einer Spalte aus der mand1.job-Tabelle einsetze, funktioniert es nicht mehr.

Ich werde mir das mit dem Join mal anschauen.

Gruß,
Alex
 
Hallo nochmal,

ich hab es jetzt hinbekommen, danke für den Tipp mit dem Join!

Hier noch der Code:

SQL:
DELETE FROM mobile.stellen WHERE NOT EXISTS(SELECT uuid FROM mand1.job WHERE mand1.job.uuid = mobile.stellen.uuid);
UPDATE mand1.job,mobile.stellen 
SET mobile.stellen.prev_zip=mand1.job.einsatzplz, mobile.stellen.prev_country=mand1.job.einsatzort, mobile.stellen.latlon_changed = 1
WHERE mand1.job.uuid = mobile.stellen.uuid AND (prev_zip <> einsatzplz OR prev_country <> einsatzort);
INSERT IGNORE INTO mobile.stellen (uuid, prev_zip, prev_country) SELECT uuid, einsatzplz, einsatzort FROM mand1.job;

Gruß,
Alex
 

Neue Beiträge

Zurück