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

Programmeren

SQL vraag (Access 97)

None
7 antwoorden
  • Hallo allemaal,

    Ik heb een Access 97 databeesje met drie tabellen
    Apps, Links en UserSettings

    Iemand heeft deze query voor mij gemaakt (ik denk in MS SQL of MySQL) om een bepaalde combinatie te maken van deze drie tabellen.
    Nu gaat het mij niet om de resultaten, maar Access geeft een foutmelding, "Syntax error in From clause", en selecteert vervolgens het 2e "SELECT".

    Ik wil deze persoon niet teveel lastig vallen.

    Is er iemand die meteen ziet wat er mis is met deze query?

    Bij hem werkt het dus de veldnamen en tabelnamen zijn goed.


    query:

    SELECT * FROM Apps LEFT OUTER JOIN
    (SELECT * FROM UserSettings WHERE UserNaam = 'Rob')
    DERIVEDTBL ON Apps.ID = DERIVEDTBL.AppID
    WHERE (Apps.ID IN (SELECT AppID FROM Links
    WHERE UserNaam = 'Rob' OR GroupNaam = 'Administrators'))


    bedankt, Rob
  • Als het bij hem werkt is er niets mis met de query. Lijkt me logisch.
  • Niet alle SQL implementaties zijn gelijk. Sommige bevatten functies die niet in andere SQL producten voorkomen. Dat is hier ook het geval. De [b:6eb2ab92d3]DERIVEDTBL[/b:6eb2ab92d3] constructie is hoogstwaarschijnlijk de boosdoener. Probeer het volgende is:

    [code:1:6eb2ab92d3]SELECT * FROM Apps LEFT OUTER JOIN
    UserSettings ON Apps.ID = UserSettings.AppID
    WHERE (Apps.ID IN (SELECT AppID FROM Links
    WHERE UserNaam = 'Rob' OR GroupNaam = 'Administrators')) [/code:1:6eb2ab92d3]

    Uiteraard moet je nu de WHERE clausule nog aanpassen omdat nu alle rijen uit UserSettings geselecteerd worden en niet alleen die met UserNaam = 'Rob'.

    Groet,

    Butch
  • Ja, op deze manier geen foutmelding.

    Alleen heb ik inderdaad niet het resultaat wat ik zoek.

    DERIVEDTBL kan dan niet in Acces(97) gebruikt worden zeker?



    Rob
  • DERIVEDTBL lijkt mij een tijdelijke naam die gegeven wordt aan de subselect in je query en die heb je ook nodig binnen de WHERE clausule. Het lijkt mij overigens dat deze query eenvoudiger moet kunnen (vooral ook omdat ik twee keer een "Where username='rob' zie) en dus nog enig denkwerk nodig heeft.
  • Het volgende zou m.i. het gewenste resultaat moeten geven. Als dat niet zo is dan zit er denk ik niet veel anders op dan degene die de select voor jou bedacht heeft toch maar even lastig te vallen.

    [code:1:dc25fb2fae]SELECT * FROM Apps LEFT OUTER JOIN
    UserSettings ON Apps.ID = UserSettings.AppID
    WHERE (Apps.ID IN (SELECT AppID FROM Links
    WHERE UserNaam = 'Rob' OR GroupNaam = 'Administrators')
    AND UserSettings.UserNaam = 'Rob') [/code:1:dc25fb2fae]

    Succes!

    Butch
  • [quote:60fd57e663="Rob V"]
    Ik heb een Access 97 databeesje met drie tabellen
    Apps, Links en UserSettings

    Iemand heeft deze query voor mij gemaakt (ik denk in MS SQL of MySQL) om een bepaalde combinatie te maken van deze drie tabellen.
    Nu gaat het mij niet om de resultaten, maar Access geeft een foutmelding,
    [/quote:60fd57e663]
    Hoezo gaat het je niet om de resultaten?
    [quote:60fd57e663="Rob V"]
    "Syntax error in From clause", en selecteert vervolgens het 2e "SELECT".

    Ik wil deze persoon niet teveel lastig vallen.
    [/quote:60fd57e663]
    En nu mogen wij het oplossen?
    [quote:60fd57e663="Rob V"]
    Is er iemand die meteen ziet wat er mis is met deze query?

    Bij hem werkt het dus de veldnamen en tabelnamen zijn goed.
    [/quote:60fd57e663]
    Hmm, Dat hoeft op zich niets te betekenen.
    [quote:60fd57e663="Rob V"]

    query:[code:1:60fd57e663]
    SELECT *
    FROM Apps
    LEFT OUTER JOIN
    ( SELECT *
    FROM UserSettings
    WHERE UserNaam = 'Rob'
    ) DERIVEDTBL
    ON Apps.ID = DERIVEDTBL.AppID
    WHERE (Apps.ID IN
    ( SELECT AppID
    FROM Links
    WHERE (UserNaam = 'Rob')
    OR (GroupNaam = 'Administrators')
    )
    )[/code:1:60fd57e663]
    [/quote:60fd57e663]
    Die query klopt volgens mij sowieso niet.

    Je doet een Left join op de tabel UserSettings, maar vervolgens doe je niets met deze gegevens. Het enige resultaat dat dit kan hebben is dat records uit de Apps-tabel meerdere keren in het resultaat kunnen voorkomen.

    Misschien is het handig als je de (simpele) tabeldefinities geeft en vertelt wat het resultaat zou moeten zijn.

Beantwoord deze vraag

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