Hallo Experten,
ich fange gerade an MySQL zu lernen und habe mir zum Üben eine kleine Pseudonymen-DB geschrieben. Der Aufbau sieht so aus:
Tabelle person:
pers\_id: int(10) unsigned NOT NULL auto\_increment
name: varchar(255)
vorname: varchar(255)
geb\_jahr: date
gest\_jahr: date
Tabelle varianten:
var\_id: int(10) unsigned NOT NULL auto\_increment
var\_name: varchar(255)
var\_vorname: varchar(255)
pers\_id: int(10)
Tab. person -> Tab varianten ist eine 1:n-Beziehung, d.h. eine Person kann viele Pseudonyme haben.
Gefüllt ist die Tab. person so:
1, '-ky', '', '1938-00-00', NULL
2, 'Christie', 'Agatha', '1890-00-00', '1976-00-00'
3, 'Ambesser', 'Axel von', '1910-00-00', '1988-00-00'
4, 'Crosby', 'Bing', '1904-00-00', '1977-00-00'
5, 'Dylan', 'Bob', '1941-00-00', NULL
und die Tabelle varianten so:
1, 'Bosetzky', 'Horst', 1
2, 'Miller', 'Agatha Mary Clarissa', 2
3, 'Oesterreich', 'Axel Eugen Alexander von', 3
4, 'Lillis', 'Harry', 4
5, 'Zimmermann', 'Robert Alan', 5
Man soll einen Namen eingeben können, egal ob Pseudonym oder echter Name, und erhält dann die Geburtsdaten. Leider funktioniert das nur in einer Richtung. Wenn ich nach Zimmermann frage
SELECT vorname, name, var\_name, geb\_jahr, gest\_jahr
FROM person, varianten
WHERE name = "Zimmermann"
OR var\_name = "Zimmermann"
AND varianten.pers\_id = person.pers\_id
erhalte ich das richtige Ergebnis:
Bob Dylan Zimmermann 1941-00-00 NULL
bei der gleichen Frage nach Dylan
SELECT vorname, name, var\_name, geb\_jahr, gest\_jahr
FROM person, varianten
WHERE name = "Dylan"
OR var\_name = "Dylan"
AND varianten.pers\_id = person.pers\_id
gibt es jedoch gleich 5 Ergebnisse:
Bob Dylan Bosetzky 1941-00-00 NULL
Bob Dylan Miller 1941-00-00 NULL
Bob Dylan Oesterreich 1941-00-00 NULL
Bob Dylan Lillis 1941-00-00 NULL
Bob Dylan Zimmermann 1941-00-00 NULL
Soviel glaube ich verstanden zu haben, daß es irgendwie mit Join zu tun hat, weiss aber trotzdem nicht, wo der Fehler in der Abfrage liegt. Kann mir bitte mal jemand einen Hinweis geben?
Vielen Dank schon mal
Jan