Google is vandaag niet mijn vriend, aldus dit topic.
Ik heb een query die haalt de 4 meest recent uitgegeven boeken op, en koppelt deze aan de auteur van dit boek dmv een eenvoudige (left) join.
Nu is er bij het ontwerp van dit systeem echter geen rekening gehouden met boeken met meerdere auteurs, waardoor er twee rijen voor 1 boek teruggegeven worden - 1 voor elke auteur.
Met Goegel ben ik niet veel verder gekomen - de daarin gestelde casussen konden vaak simpelweg iets met het hoogste ID eruithalen, maar dit is hier niet op van toepassing - of ik ben gek.
In ieder geval, dit is de huidige query, in vereenvoudigde vorm
Die de resultaten geeft:
Zoals te zien staat 'Verzamelde Gedichten' hier tweemaal in, omdat deze twee auteurs heeft.
Nu heb ik dit als volgt geprobeerd op te lossen (work in progress, de daadwerkelijke auteur die zichtbaar moet zijn weet ik nog niet), door een subquery in je join te doen die maar 1 auteur ophaalt:
Maar zoals doorgewinterde SQL mensen misschien wel weten geeft dit de fout dat:
Dusch. Ik zit een beetje vast - welke oplossingen zijn er nog meer? Behalve het ombouwen van de presentatielaag zodat die rekening houdt met meerdere rijen met boeken natuurlijk - dat zal veel te lang duren, lijkt mij. Uw hulp zou zeer welkom zijn. Ideaal zou zijn als dit allemaal gewoon in 1 query kan, zonder dat dit al te zwaar op de performance gaat drukken.
(ps, de software is MSSQL, volgens mij 2005)
Ik heb een query die haalt de 4 meest recent uitgegeven boeken op, en koppelt deze aan de auteur van dit boek dmv een eenvoudige (left) join.
Nu is er bij het ontwerp van dit systeem echter geen rekening gehouden met boeken met meerdere auteurs, waardoor er twee rijen voor 1 boek teruggegeven worden - 1 voor elke auteur.
Met Goegel ben ik niet veel verder gekomen - de daarin gestelde casussen konden vaak simpelweg iets met het hoogste ID eruithalen, maar dit is hier niet op van toepassing - of ik ben gek.
In ieder geval, dit is de huidige query, in vereenvoudigde vorm
SQL:
1
2
3
4
5
6
7
8
9
10
| SELECT DISTINCT TOP 4 prd.EerstePublicatieDatum, prd.id as bookId, prd.titel AS bookTitle, pch.cph_id AS authorId, cph.voornaam + ' ' + cph.achternaam AS authorName FROM Product prd LEFT JOIN ProductCopyrightHouder pch ON pch.prd_id = prd.id INNER JOIN copyrighthouder cph ON cph.id = pch.cph_id ORDER BY prd.EerstePublicatieDatum DESC |
Die de resultaten geeft:
code:
1
2
3
4
| 2009-08-29 00:00:00 21584 Verzamelde gedichten 7716 Hagar Peeters 2009-08-29 00:00:00 21584 Verzamelde gedichten 7717 Bart Vonck 2009-08-28 00:00:00 19817 Balotje en het tasje van oma 3131 Yvonne Jagtenberg 2009-08-28 00:00:00 21443 Zoete mond 2935 Thomas Rosenboom |
Zoals te zien staat 'Verzamelde Gedichten' hier tweemaal in, omdat deze twee auteurs heeft.
Nu heb ik dit als volgt geprobeerd op te lossen (work in progress, de daadwerkelijke auteur die zichtbaar moet zijn weet ik nog niet), door een subquery in je join te doen die maar 1 auteur ophaalt:
code:
1
| INNER JOIN (SELECT Id, voornaam, achternaam FROM CopyrightHouder WHERE Id = pch.cph_id) cph ON cph.id = pch.cph_id |
Maar zoals doorgewinterde SQL mensen misschien wel weten geeft dit de fout dat:
code:
1
| The column prefix 'pch' does not match with a table name or alias name used in the query. |
Dusch. Ik zit een beetje vast - welke oplossingen zijn er nog meer? Behalve het ombouwen van de presentatielaag zodat die rekening houdt met meerdere rijen met boeken natuurlijk - dat zal veel te lang duren, lijkt mij. Uw hulp zou zeer welkom zijn. Ideaal zou zijn als dit allemaal gewoon in 1 query kan, zonder dat dit al te zwaar op de performance gaat drukken.
(ps, de software is MSSQL, volgens mij 2005)