Avatar billede dr_nielsen Nybegynder
15. juni 2009 - 20:29 Der er 3 kommentarer

SQL, konsitente records ud af "en til mange" relationer

Hej

Jeg har en SQL udfording som jeg ikke helt kan få hul på.

Fra nedenstående 3 tabeller skal jeg gerne kunne få nogle konsitente records ud med følgende felter:

UderProfileId | Name | Email | ZipCode | Count(Advertisments)

Userprofiles kan have flere advertisements, og advertisements kan have flere advertisements_Zip.
---------------------------------------------------------


Kriterierne kan feks være på [UserProfile] Niveau
ZipCode = 2200

De kan også ligge på [Advertisement] niveau
TypeId = 1

Og de kan også ligge i [Advertisement_Zip] niveau:
ZipCode between (2100 and 2200)

UserProfile
-----------------------
- PK_UserProfileId
- Name
- Email
- ZipCode


Advertisement
-----------------------
- FK_UserProfileId
- PK_AdvertisementId
- TypeId
- Description


Advertisement_Zip
-----------------------
- FK_AdvertisementId
- ZipCode


Giver det mening, har nogen et bud? På forhånd tak

/dr_Nielsen
Avatar billede aaberg Nybegynder
16. juni 2009 - 08:58 #1
Hvad følgende (ikke testet):

på UserProfile niveau

select u.PK_UserProfileId UserProfileId, u.Name, u.Email, u.ZipCode, count (*) cnt
from UserProfile u
inner join Advertisement a on u.PK_UserProfileId = a.FK_UserProfileId
where u.ZipCode = 2200
group by u.PK_UserProfileId UserProfileId, u.Name, u.Email, u.ZipCode


på Advertisement niveau

select u.PK_UserProfileId UserProfileId, u.Name, u.Email, u.ZipCode, count (*) cnt
from UserProfile u
inner join Advertisement a on u.PK_UserProfileId = a.FK_UserProfileId
where a.TypeId = 1
group by u.PK_UserProfileId UserProfileId, u.Name, u.Email, u.ZipCode


på Advertisement_Zip niveau

select u.PK_UserProfileId UserProfileId, u.Name, u.Email, u.ZipCode, count (*) cnt
from UserProfile u
inner join Advertisement a on u.PK_UserProfileId = a.FK_UserProfileId
where a.AdvertisementId in (select FK_AdvertisementID from Advertisement_ZIP where ZipCode between 2100 and 2200)
group by u.PK_UserProfileId UserProfileId, u.Name, u.Email, u.ZipCode
Avatar billede dr_nielsen Nybegynder
16. juni 2009 - 13:42 #2
Tusind tak, Kan det lade sige at lave et script der har kriterer på alle niveauer. Eller skal det brydes op som ovenfor?
Avatar billede aaberg Nybegynder
16. juni 2009 - 14:43 #3
Måske sådan her:

select u.PK_UserProfileId UserProfileId, u.Name, u.Email, u.ZipCode, count (*) cnt
from UserProfile u
inner join Advertisement a on u.PK_UserProfileId = a.FK_UserProfileId
where u.ZipCode = 2200
and a.TypeId = 1
and a.AdvertisementId in (select FK_AdvertisementID from Advertisement_ZIP where ZipCode between 2100 and 2200)
group by u.PK_UserProfileId UserProfileId, u.Name, u.Email, u.ZipCode
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester