Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

[MySQL] Queries in een IS-A relatie?

Anoniem
BasHamar
2 antwoorden
  • LS,

    Ik ben tegen een probleem aangelopen, graag jullie hulp. Ik heb een 4-tal tabellen die samen een zgn IS-A relatie voorstellen. Allereerst een tabel met personen. Vervolgens dient elk van die personen in exact één andere tabel voor te komen.

    Stel, personen zijn óf voetballer óf coach óf scheidsrechter (met alle bijbehorende en verschillende eigenschappen). Omdat MySQL geen (echte) constraints ondersteunt moet ik zelf afdwingen dat elke persoon altijd is ingedeeld bij een categorie. Is het mogelijk om met één query alle personen te krijgen die [i:8eb7d9cc46]niet[/i:8eb7d9cc46] in een categorie zijn ingedeeld?

    Ik weet dat ik subqueries zou kunnen gebruiken (al weet ik niet in hoeverre MySQL dat ondersteunt), maar ik hoop eigenlijk op een simpelere oplossing en weet niet waar ik het moet zoeken. Het lijkt me echter dat 3 subqueries flinke overkill zijn om te bereiken wat ik wil.

    Alle hulp wordt bijzonder gewaardeerd!

    [b:8eb7d9cc46]Edit:[/b:8eb7d9cc46] Hm, het is zeker laat, maar het ging prima met subqueries. :? Desalnietemin ben ik nog steeds geïnteresseerd in evt simpelere methoden, maar verder is dit probleem opgelost.

    - Bas
  • De mooiste manier vind ik zelf idd met subqueries werken (3 in ouw geval):
    [code:1:ba94f07d33]SELECT * FROM personen WHERE pid NOT IN (SELECT pid FROM voetballer) AND …[/code:1:ba94f07d33]
    Een andere manier, maar minder mooi vind ik:
    [code:1:ba94f07d33]SELECT * FROM personen p
    LEFT JOIN voetballer v ON p.pid=v.pid
    LEFT JOIN coach c ON p.pid=c.pid
    WHERE v.pid IS NULL AND c.pid IS NULL[/code:1:ba94f07d33]

    Wat ik eerlijk gezegd zelf meestal doe, omdat zoals je al aangeeft er eigenljk geen goede middelen zijn om een ISA te modelleren, is alles in een table gooien met dus een paar NULLs erin. Wanneer voetballers en coaches zich weinig onderscheiden van personen kan dat gemakkelijk.

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.