Derefter har jeg lavet relationerne, med en en til mange fra DT_borgerstat til ST_data og en en til mange fra DT_data til ST_data.
når jeg laver en forespørgsel med en AND altså jeg vil gerne finde de fodselsdatoer der har en eks. 2 konkrete registreringer samtidigt, så får jeg intet resultat..
men hvis jeg laver en forespørgsel med en OR altså jeg vil gerne finde de fodselsdatoer, der har 1 af de to registreringer, så får jeg resultat, som jeg skal.
hvordan kan det være jeg ikke får resultat på AND ?
SELECT DT_borgerstat.fodselsdato, DT_data.registrering FROM DT_data INNER JOIN (DT_borgerstat INNER JOIN ST_data ON DT_borgerstat.IDborgerstat = ST_data.DT_borgerstat) ON DT_data.IDdata = ST_data.DT_data WHERE (((DT_data.registrering)="basisaktivering" And (DT_data.registrering)="Uden ydelse under forløb"));
WHERE (((DT_data.registrering)="basisaktivering" And (DT_data.registrering)="Uden ydelse under forløb"));
betyder: Giv mig alle poster, hvor registrering både er lig med "basisaktivering" og samtidig lig med "Uden ydelse under forløb" - og det er der jo ingen poster, der kan være.
Du må nok den tunge vej, f.eks. over to separate forespørgsler, som du så sammensætter:
SELECT DT_borgerstat.fodselsdato, DT_data.registrering FROM DT_data INNER JOIN (DT_borgerstat INNER JOIN ST_data ON DT_borgerstat.IDborgerstat = ST_data.DT_borgerstat) ON DT_data.IDdata = ST_data.DT_data WHERE DT_data.registrering="basisaktivering"
UNION
SELECT DT_borgerstat.fodselsdato, DT_data.registrering FROM DT_data INNER JOIN (DT_borgerstat INNER JOIN ST_data ON DT_borgerstat.IDborgerstat = ST_data.DT_borgerstat) ON DT_data.IDdata = ST_data.DT_data WHERE DT_data.registrering="Uden ydelse under forløb";
Hm. Så er jeg tilbage. Jeg var vist lidt for hurtig sidst. Undskyld forvirringen.
Det nemmeste er nok, hvis du nedbryder opgaven i del-opgaver.
1. Find alle fodselsdatoer med "basisaktivering" 2. Find alle fodselsdatoer med "Uden ydelse under forløb" 3. Find alle, der optræder på begge lister
Ad 1) Opret en forespørgsel, f.eks. Q_Basis: SELECT ST_data.DT_borgerstat FROM DT_data INNER JOIN ST_data ON DT_data.IDdata = ST_data.DT_data WHERE DT_data.registrering="basisaktivering";
Ad 2) Opret en forespørgsel, f.eks. Q_Ydelse: SELECT ST_data.DT_borgerstat FROM DT_data INNER JOIN ST_data ON DT_data.IDdata = ST_data.DT_data WHERE DT_data.registrering="Uden ydelse under forløb";
Ad 3) Opret resultat-forespørgslen: SELECT DT_borgerstat.fodselsdato FROM (Q_Basis INNER JOIN Q_Ydelse ON Q_Basis.DT_borgerstat = Q_Ydelse.DT_borgerstat) INNER JOIN DT_borgerstat ON Q_Ydelse.DT_borgerstat = DT_borgerstat.IDborgerstat;
Hvis du smider SQL-udtrykkene ind i forespørgselsdesigneren, bliver overblikket måske lidt bedre ;O)
Jeg vil tro, at det samme vil kunne opnås ved en lille omskrivning af den oprindelige forespørgsel, der joiner til DT_Data to gange og i udvælgelsen angiver forskelligt alias (de to DT_Data skal have nyt navn, da de ellers ikke kan refereres) i selektionen på status.
SELECT DT_borgerstat.fodselsdato, DT_data.registrering FROM ((DT_borgerstat INNER JOIN ST_data ON DT_borgerstat.IDborgerstat = ST_data.DT_borgerstat) INNER JOIN DT_data AS DT_DATA1 ON DT_data1.IDdata = ST_data.DT_data) INNER JOIN DT_data AS DT_DATA2 ON DT_data2.IDdata = ST_data.DT_data WHERE (((DT_data1.registrering)="basisaktivering" And (DT_data2.registrering)="Uden ydelse under forløb"));
Jeg må hellere lige tilføje, at du bliver nødt til at ændre feltet DT_data.registrering til DT_data1.registrering (eller DT_data2.registerring) i SELECT statementet afhængig af hvad du vil vise.
Hej tak til jer begge 2, Jeg beklager jeg ikke er vendt tilbage angående det her, men jeg er i den grad blevet sat på en anden opgave så jeg har ikke lige nu mulighed for at prøve det af i har foreslået, men jeg vender tilbage til det..
I mellemtiden kan i 2 så ikke indsende et svar hver, så i deler pointene ?
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.