Martin: Mehrfachjoin

Beitrag lesen

Hallo Vinzenz,

erstmal vielen Dank für deine ausführliche Antwort.

es wäre eine sehr gute Idee, Deine Tabellenstruktur zu bereinigen.

Da bin ich doch gerade dabei ;)
Die neue User-Datenbank mit einer übergeordneten ID war der erste/schwierigste Schritt.

Ist so eine Abfrage mit join überhaupts möglich?

Das hängt von Deinem Datenbankmanagementsystem (DBMS) ab.

Um zum gewünschten Ergebnis zu gelangen verwende ich den FULL OUTER JOIN. Dieser wird nicht von jedem DBMS unterstützt, so z.B. von MySQL.

Leider hab ich vergessen zu schreiben, dass ich MySQL 4.1.10 verwende.
Es gibt zwar Umwege mit denenen man auch mit diesem DBMS einen FULL OUTER JOIN realisieren kann, aber damit bin ich nicht wirklich zurecht gekommen.
FULL OUTER JOIN
How to do a full outer join in mysql 3.23

Ich bin jetzt einen anderen Weg gegangen, der zwar umständlicher ist für mich einfacher war.

1. Eine neue Tabelle pv_user erstellt mit den Feldern: ID,name,id02,...,id06

INSERT INTO pv_user
SELECT 0 , pv02.name, pv02.id, 'x', 'x', 'x', 'x'
FROM pv02

INSERT INTO pv_user
SELECT 0 , pv03.name, 'x', pv03.id, 'x', 'x', 'x'
FROM pv03
LEFT JOIN pv_user
USING ( name )
WHERE pv_user.name IS NULL

...

2. Nach und nach die IDs der anderen Jahre hinzugefügt

SELECT u.name, pv02.id
FROM pv02, pv_user AS u
LEFT JOIN pv_user
USING ( name )
WHERE u.name = pv02.name
AND u.id02 =0

hier habe ich dann vergeblich versucht dieses SELECT als SUBQUERY in die UPDATE-Anweisung einzuarbeiten.
Bin dann den Umweg über eine PHP-Schleife gegangen:
update pv_user set id02 ='".$zelle['id']."' where name='".$zelle['name']."'"

3. Überprüfung ob alles stimmt

SELECT pv_user.name
FROM pv_user
WHERE pv_user.id02 !=0

und

SELECT pv02.name
FROM pv02

ergab die gleiche Anzahl.
Jetzt müsste eigentlich alles stimmen.

Gruß,
Martin