Ik ben bezig om wat gegevens uit een DB (ms-sql 2005) te halen, en wil het meeste werk door sql zelf laten afhandelen, en zo min mogelijk aan de kant van de applicatie zelf gaan uitvoeren.
De data komt uit 4 tabellen, "product", "productArtistJoin", "artist" en "medium".
Het eruit halen is gelukt met wat Joins, waar het probleem nu ligt, is het feit dat er meerdere artiesten kunnen voorkomen bij een product. Wanneer dit het geval is, wil ik de "artistName" vervangen voor de tekst "v.a.".
Hieronder de query die ik gebruik om de data eruit te halen
en wat voorbeeld output
Wat ik wil bereiken::
Ik wil uiteindelijk van deze output, 3 records overhouden, waarbij productId dus als `uniek` geldt.
En waarbij in het geval van een gemergde record (waarbij meerdere artiesten zaten), de tekst vervangen wordt door "v.a.".
Ik breek nu zelf al een aantal uren hier het hoofd over, en hulp is erg welkom
, een schop de goede kant op uiteraard ook.
Ik heb zelf al de volgende `manieren` geprobeerd:
een DISTINCT op productId gooien, met een count eromheen, maar dit telt (uiteraard
) alleen de unieke records, ik heb ongeveer het tegenovergestelde nodig.
een While loop erin , om te controleren hoevaak een id voorkwam
, dit gaf ook allerlei rare effecten
**Edit**
ter verduidelijking, de product id's zijn uniek in de database, maar komen nu vaker tevoorschijn doordat hij gejoined wordt met meerdere artiesten (wat ik wil afvangen)
De data komt uit 4 tabellen, "product", "productArtistJoin", "artist" en "medium".
Het eruit halen is gelukt met wat Joins, waar het probleem nu ligt, is het feit dat er meerdere artiesten kunnen voorkomen bij een product. Wanneer dit het geval is, wil ik de "artistName" vervangen voor de tekst "v.a.".
Hieronder de query die ik gebruik om de data eruit te halen
SQL: Query
1
2
3
4
5
6
7
8
9
10
11
12
13
| SELECT product.productId, product.title, product.actStock, medium.medium, artist.artistName FROM product LEFT JOIN medium ON product.mediumId = medium.mediumId INNER JOIN productArtistJoin ON product.productId = productArtistJoin.productId JOIN artist ON productArtistJoin.artistId = artist.artistId |
en wat voorbeeld output
| productId | title | actStock | medium | artistId |
| 5 | Hitzone 30 | 25 | CD | Britney Spears |
| 5 | Hitzone 30 | 25 | CD | Bon Jovi |
| 5 | Hitzone 30 | 25 | CD | 40 Cent |
| 6 | Rock Hits | 11 | CD | Bruce Springsteen |
| 6 | Rock Hits | 11 | CD | Bryan Adams |
| 8 | The Reflex | 5 | CD | Duran Duran |
Wat ik wil bereiken::
| productId | title | actStock | medium | artistId |
| 5 | Hitzone 30 | 25 | CD | v.a. |
| 6 | Rock Hits | 11 | CD | v.a. |
| 8 | The Reflex | 5 | CD | Duran Duran |
Ik wil uiteindelijk van deze output, 3 records overhouden, waarbij productId dus als `uniek` geldt.
En waarbij in het geval van een gemergde record (waarbij meerdere artiesten zaten), de tekst vervangen wordt door "v.a.".
Ik breek nu zelf al een aantal uren hier het hoofd over, en hulp is erg welkom
Ik heb zelf al de volgende `manieren` geprobeerd:
een DISTINCT op productId gooien, met een count eromheen, maar dit telt (uiteraard
een While loop erin , om te controleren hoevaak een id voorkwam
**Edit**
ter verduidelijking, de product id's zijn uniek in de database, maar komen nu vaker tevoorschijn doordat hij gejoined wordt met meerdere artiesten (wat ik wil afvangen)
[ Voor 11% gewijzigd door CrashOverDrive op 21-10-2008 22:31 ]