Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Oberhaupt

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von insomni4, 23 März 2015.

  1. insomni4

    insomni4 Benutzer

    Hi,

    ich möchte eine SQL-Abfrage machen, die ich leider nicht ganz realisieren kann. Ziel ist es, das Oberhaupt einer Familie zu selektieren, das eine Person in der Kundengruppe hat, der im Jahre 1998 oder später geboren ist. Das Feld "Oberhaupt" = 1, wenn er das Oberhaupt ist und 0 wenn nicht. Ich habe dies erstmal versucht mit einem Subselect zu machen, aber selektiert werden nur alle Personen die später als 1998 geboren sind und Oberhäupte sind, was zum Teil schonmal richtig ist. Nur werden die Oberhäupte in der Kundengruppe, die älter wären nicht angezeigt.

    Hat jemand einen Beispiel oder einen Link, wie ich das lösen kann. Vielleicht gibt es da einen Trick die Oberhäupte anzuzeigen, die auch später als 1998 geboren sind in der selben Kundengruppe.

    Grüße
     
  2. akretschmer

    akretschmer Datenbank-Guru


    Zeig bitte Deine Tabelle(n) mit einigen Beispiel-Datensätzen und was bei rauskommen soll.
     
  3. insomni4

    insomni4 Benutzer

    Ich benutze eine vorgefertigte Datenbank von einer Software, und das ist zugemüllt mit unendlich vielen unbrauchbaren Felder. Das heißt bis man sich da einarbeitet, kann das sehr lange dauern. Deshalb habe ich die Tabellen nicht im ersten Posting nicht geschrieben.

    Was rauskommen soll ist:
    Name, Vorname, Titel, Anrede vom Oberhaupt, der eine Person in der selben Familiengruppe hat, die später als 1997 geboren ist.


    Ich hoffe, dass man was von meinem Select versteht:

    Select DISTINCT
    person.Name,
    person.Vorname,
    person.Titel,
    person.Anrede,

    from
    kungruppe,
    kundengruppe,
    KUNDEN,
    person
    where
    and person.id = k_KUNDEN.nperson
    and kungruppe.nkundengr = kundengruppe.gruppeid
    and kundengruppe.cgruppe = 'Familie'
    and kungruppe.loberhaupt = 1
    and geburtsjahr > ALL (Select geburtsjahr
    From
    kungrup,
    kundengr,
    KUNDEN KUNDEN,
    person person
    where
    and person.id = KUNDEN.nperson
    and kungruppe.nkundengr = kundengruppe.gruppeid
    and kundengruppe.cgruppe = 'Familie'
    and kungruppe.loberhaupt = 0
    and geburtsjahr = 1997)
     
  4. Distrilec

    Distrilec Datenbank-Guru

    Sicher dass das funktioniert?
     
  5. insomni4

    insomni4 Benutzer

    Ich habe die Feldernamen ein wenig verändert. Da ist mir ein Fehler anscheinend passiert dabei, danke.
    Aber daran liegt es nicht, mein Select funktioniert, macht aber nicht was er tun soll :D.

    Select DISTINCT
    person.Name,
    person.Vorname,
    person.Titel,
    person.Anrede,

    from
    kungruppe,
    kundengruppe,
    KUNDEN,
    person
    where
    and person.id = KUNDEN.nperson
    and kungruppe.nkundengr = kundengruppe.gruppeid
    and kundengruppe.cgruppe = 'Familie'
    and kungruppe.loberhaupt = 1
    and geburtsjahr > ALL (Select geburtsjahr
    From
    kungrup,
    kundengr,
    KUNDEN KUNDEN,
    person person
    where
    and person.id = KUNDEN.nperson
    and kungruppe.nkundengr = kundengruppe.gruppeid
    and kundengruppe.cgruppe = 'Familie'
    and kungruppe.loberhaupt = 0
    and geburtsjahr = 1997)
     
  6. akretschmer

    akretschmer Datenbank-Guru

    Dein

    Code:
    ALL (Select geburtsjahr
    From
    kungrup,
    kundengr,
    KUNDEN KUNDEN,
    person person
    where
    and person.id = KUNDEN.nperson
    and kungruppe.nkundengr = kundengruppe.gruppeid
    and kundengruppe.cgruppe = 'Familie'
    and kungruppe.loberhaupt = 0
    and geburtsjahr = 1997)
    
    wird immer zu ALL(1997) werden, aufgrund der WHERE-Condition ganz am Ende.

    Davon abgesehen habe ich nicht viel Lust, ohne Tabellendefinition und ohne expliziete JOIN's das zu entziffern.
     
  7. Distrilec

    Distrilec Datenbank-Guru

    Mal in Pseudo-Code, ohne dein Statement in irgend einer Art und Weise zu beachten...
    Code:
    Select *
    From deiner_tabelle
    where exists(eine andere person als die, die oberhaupt ist)
     

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden