phpbar.de logo

Mailinglisten-Archive

verwickelte SQL-Abfrage mit JOIN's

verwickelte SQL-Abfrage mit JOIN's

Ulrich Kretschmer u.kretschmer.mysql.4t2 at bergruf.de
Mon Mai 21 21:03:12 CEST 2007


Hallo zusammen,

die folgende Abfrage

SELECT familyID, w.personID, w.lastname, w.firstname, et.tag, et.description, 
e.info FROM tng_families AS f 
INNER JOIN tng_people AS w ON (f.wife=w.personID AND f.gedcom=w.gedcom) 
LEFT JOIN tng_events AS e ON (w.personID=e.persfamID AND w.gedcom=e.gedcom)
LEFT JOIN tng_eventtypes AS et ON e.eventtypeID=et.eventtypeID;

verbindet die Tabellen 
	tng_eventypes -> tng_events -> tng_people -> tng_families 
und soll so modifiziert werden, daß alle Personen geliefert werden, die das 
"event" Ehename *nicht* zugeordnet haben und ansonsten entweder gar keine 
"events" haben (et.tag=NULL) oder auch irgendwelche anderen 
(description<>"Ehename").

Einige Beispiele bzw. Fallunterscheidungen zur Verdeutlichung:

+----------+----------+----------+----------------------+------+-------------+--------------+
| familyID | personID | lastname | firstname            | tag  | description | 
info         |
+----------+----------+----------+----------------------+------+-------------+--------------+
| F11342   | I4917    | Meyer    |                      | NULL | NULL 
^ hat gar keine Ereignisse (et.tag=NULL) zugeordnet => solche Zeilen sollen 
geliefert werden

| F13983   | I34643   | Meyer    | Auguste Rosine       | EVEN | Rufname     | 
Rosine       |
| F13983   | I34643   | Meyer    | Auguste Rosine       | EVEN | Ehename     | 
Müller        |
^ hat bereits ein Ereignis Ehename zugeordnet (et.tag="EVEN" AND 
description="Ehename") => zu einer solchen Person sollen keine Zeilen 
geliefert werden

| F13306   | I32755   | Meyer | Gisela Luise    | OCCU |             | 
einBeruf |
| F13306   | I32755   | Meyer | Gisela Luise    | EVEN | Rufname     | Gisela     
|
^ hat irgendwelche anderen Ereignisse zugeordnet (et.tag<>NULL), aber keinen 
Ehenamen => diese Zeilen sollen geliefert werden (wobei es an sich genügen 
würde, pro Person (personID) nur eine Zeile zu liefern).

Mit so einer Abfrage steh ich auf dem Schlauch... vor allem mit dem zweiten 
und dritten Fall - zu einer Person kann es "n" events geben, aber erst beim 
letzten weiß man, ob nicht doch ein Ehename dabeigewesen ist, sodaß die 
vorhergehenden Zeilen eigentlich gar nicht interessiert haben.

Ich habe die grobe Vorstellung, daß man die ganze Abfrage irgendwie (?) 
verdoppeln muß, um zu jeder Zeile (w.personID) nochmals eine Spalte mit 
entweder et.description="Ehename" oder NULL zu haben, wonach man dann alle 
Zeilen mit "Ehename" in dieser zusätzlichen Spalte unterdrückt und der 
gewünschte Rest übrig bleibt. 

Aber wie kriege ich diese zusätzliche Spalte hin? Oder vielleicht geht es ja 
ganz anders und viel einfacher...

Mit Dank im Voraus
Ulrich
_______________________________________________
Allgemeine Infos zur Liste: http://www.4t2.com/mysql/
Verwaltung: https://lists.4t2.com/cgi-bin/mailman/listinfo/mysql-de

php::bar PHP Wiki   -   Listenarchive