SQL Anweisung

HUE

Well-Known Member
Hallo,

ich habe wieder einmal ein kleines Anliegen an die Community.

Ich brauche eine gescheite SQL- Anweisung für ein Familienstammbaum.

Ich benutze SQLITE3. Im Anhang befinden sich Anweisungen und gewünschte Ausgabeergebnisse zur Erklärung meines Problems.

Wie immer bin ich für sachdienliche Hinweise sehr dankbar.

MfG

HUE\a

Ich muss noch folgende Anweisung hinzufügen:

insert into vater values (0,0);
insert into person values (0,NULL,NULL,0,0,NULL);
 

Anhänge

  • test.txt
    1,2 KB · Aufrufe: 375
Zuletzt bearbeitet:
Hi,
irgendwie sowas:
Code:
select vgeburtsname, vvname, person.geburtsname, person.vorname
from person inner join (
    select person.id as vid, person.geburtsname as vgeburtsname, person.vorname as vvname
    from person, vater
    where person.id = vater.personid
) on person.vaterid = vid
where vid != 0;

Hab hier grad bloß keine Datenbank rumliegen, um das ganze auszuprobieren.
 
Hallo,

leider führt diese Anweisung zu keinem Ergebnis.

Ich bin noch ratlos :-(.

Hat jemand noch eine Idee?

MfG

HUE\a
 
Eigentlich sollten die Peronen und die Beziehungen auch in zwei unterschiedliche Tabellen...Oder ist das hier?
So ganz werd ich da nicht schlau draus.

Sage mal in Prosa was Du gern für ein Ergebnis hättest?
 
Das ganze sieht mir sehr nach einem Uni Übungsblatt aus. Du hast außerdem einen Typfehler in der letzten Spalte deiner Inserts. SQLite speichert es dann trotzdem ab, aber nicht als Integer.

Die Verwendung von 0 als NULL ist noch schlimmer als die Verwendung von NULL.
 
Hallo an alle,

es ist bestimmt kein Uni- Übungsblatt, ich wollte bloß nicht die ganze puckelige Verwandschaft hier bekanntgeben.

Mein Ziel ist es die Vaterbeziehungen so darzustellen, dass der Vater mit Namen und Vornamen vor all seien Kindern mit Namen und Vornamen steht.

Dazu habe ich zwei Tabellen: einmal die Personen als solche mit Vater- und Mutter- Schlüssel; hier nur der Vater in der Tabelle Vater mit eindeutigem Schlüssel für den Vatersatz und die jeweilige Personen ID, aus der Tabelle Personen.

Hier nochmals die verbesserte SQL Anweisung für die Datenbank und Abfrage:

Code:
CREATE TABLE person(id integer primary key,geburtsname text,vorname text,vaterid integer, mutterid integer, geschlecht integer)
;
CREATE TABLE vater (id integer primary key, personid integer );

INSERT INTO "person" VALUES(2,'Mustermann','Adam',0,0,'männlich');
INSERT INTO "person" VALUES(3,'Mustermann','Willi',1,11,'männlich');
INSERT INTO "person" VALUES(4,'Mustermann','Ernst',1,11,'männlich');
INSERT INTO "person" VALUES(5,'Mustermann','Günther',1,1,'männlich');
INSERT INTO "person" VALUES(6,'Mustermann','Ruth',1,1,'weiblich');
INSERT INTO "person" VALUES(7,'Mustermann','Kurt',1,1,'männlich');

INSERT INTO "vater" VALUES(1,2);


select vater.personid, person.geburtsname, person.vorname from person inner join vater on \
                            person.vaterid = vater.id;

ergibt folgendes Ergebnis:

2|Mustermann|Willi
2|Mustermann|Ernst
2|Mustermann|Günther
2|Mustermann|Ruth
2|Mustermann|Kurt

Ich möchte aber folgende Ausgabe:

Mustermann|Adam|Mustermann|Willi
Mustermann|Adam|Mustermann|Ernst
Mustermann|Adam|Mustermann|Günther
Mustermann|Adam|Mustermann|Ruth
Mustermann|Adam|Mustermann|Kurt


MfG

HUE\a


Stimmt, das Geschlecht sollte vom Typ TEXT sein, habe ich beim Entwurf der Datenbank irgendwie übersehen. Danke für den Hinweis.
 
Zuletzt bearbeitet:
Wenn du in der personen Tabelle eh schon die Beziehungen hast, dann bräuchte man doch eigentlich die Vater-Tabelle nicht mehr.

Code:
SELECT 
  vater.geburtsname AS VatersNachname,  
  vater.vorname AS VatersVorname,
  mutter.geburtsname AS MuttersNachname,
  mutter.vorname AS MuttersVorname,
  kind.nachname AS KindesNachname,
  kind.vorname AS KindesVorname
FROM 
  person AS kind, 
  person AS vater, 
  person AS mutter
WHERE
 mutter.id=kind.mutterid AND
 vater.id=kind.vaterid

Wenn du bei dem Ansatz mit der Vater-Tabelle bleiben möchtest, hier dein ergänztes Beispiel:

Code:
select 
  dervater.geburtsname, 
  dervater.vorname,
  person.geburtsname, 
  person.vorname 
from person 
inner join vater on \
                            person.vaterid = vater.id;
inner join person as dervater on \
                            person.id=dervater.id

Du kannst eine Tabelle beliebig oft in unterschiedlichen Gestalten (daher AS ...) immer wieder abrufen ==> selfjoin

grüße
felix

ps: traf das deine Frage?
 
Hallo felix,

ich habe das Design von der Datenbank ändern müssen; damit hat sich die komplizierte Anweisung erübrigt.

Trotzdem ein herzlichen Dank Euch allen für die Hilfe.

Ein frohes Osterfest wünscht

HUE\a
 
Zurück
Oben