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
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
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