我有3代表與此架構編寫SQL查詢:需要幫助與多個一對多關係
表1
CREATE TABLE #tmpGroundPreferenceProfile
(
[Id] [int] NOT NULL,
[Name] [varchar](50) NULL
)
INSERT #tmpGroundPreferenceProfile ([Id], [Name]) VALUES (1, N'Profile1')
INSERT #tmpGroundPreferenceProfile ([Id], [Name]) VALUES (2, N'Profile2')
INSERT #tmpGroundPreferenceProfile ([Id], [Name]) VALUES (3, N'Profile3')
表2
CREATE TABLE #tmpGroundPreferenceLocations(
[Id] [int] NOT NULL,
[GroundPreferenceProfileId] [int] NULL,
[DistrictId] [int] NULL,
[RanchId] [int] NULL,
[FieldId] [int] NULL
)
INSERT #tmpGroundPreferenceLocations ([Id], [GroundPreferenceProfileId], [DistrictId], [RanchId], [FieldId]) VALUES (1, 1, 1, NULL, NULL)
INSERT #tmpGroundPreferenceLocations ([Id], [GroundPreferenceProfileId], [DistrictId], [RanchId], [FieldId]) VALUES (2, 1, 1, 1, NULL)
INSERT #tmpGroundPreferenceLocations ([Id], [GroundPreferenceProfileId], [DistrictId], [RanchId], [FieldId]) VALUES (3, 1, 1, 1, 1)
表3
CREATE TABLE #tmpGroundPreferenceRatings(
[Id] [int] NOT NULL,
[GroundPreferenceLocationId] [int] NULL,
[Rating] [int] NULL,
[Week] [int] NULL
)
INSERT #tmpGroundPreferenceRatings ([Id], [GroundPreferenceLocationId], [Rating], [Week]) VALUES (2, 1, 11, 1)
INSERT #tmpGroundPreferenceRatings ([Id], [GroundPreferenceLocationId], [Rating], [Week]) VALUES (3, 1, 12, 2)
INSERT #tmpGroundPreferenceRatings ([Id], [GroundPreferenceLocationId], [Rating], [Week]) VALUES (4, 1, 13, 3)
INSERT #tmpGroundPreferenceRatings ([Id], [GroundPreferenceLocationId], [Rating], [Week]) VALUES (5, 2, 21, 1)
INSERT #tmpGroundPreferenceRatings ([Id], [GroundPreferenceLocationId], [Rating], [Week]) VALUES (6, 2, 22, 2)
INSERT #tmpGroundPreferenceRatings ([Id], [GroundPreferenceLocationId], [Rating], [Week]) VALUES (7, 2, 23, 3)
INSERT #tmpGroundPreferenceRatings ([Id], [GroundPreferenceLocationId], [Rating], [Week]) VALUES (8, 3, 31, 1)
INSERT #tmpGroundPreferenceRatings ([Id], [GroundPreferenceLocationId], [Rating], [Week]) VALUES (9, 3, 32, 2)
INSERT #tmpGroundPreferenceRatings ([Id], [GroundPreferenceLocationId], [Rating], [Week]) VALUES (10, 3, 33, 3)
INSERT #tmpGroundPreferenceRatings ([Id], [GroundPreferenceLocationId], [Rating], [Week]) VALUES (11, 1, 14, 4)
INSERT #tmpGroundPreferenceRatings ([Id], [GroundPreferenceLocationId], [Rating], [Week]) VALUES (12, 1, 15, 5)
INSERT #tmpGroundPreferenceRatings ([Id], [GroundPreferenceLocationId], [Rating], [Week]) VALUES (13, 2, 24, 6)
INSERT #tmpGroundPreferenceRatings ([Id], [GroundPreferenceLocationId], [Rating], [Week]) VALUES (14, 2, 25, 7)
說明:
針對每個配置文件可以有多個位置,並針對每個位置可以有多個等級。
即
- 有tmpGroundPreferenceProfile和tmpGroundPreferenceLocations之間的一個一對多的關係艦
- 有tmpGroundPreferenceLocations和#tmpGroundPreferenceRatings
問題之間的一個一對多的關係船:
可以有多個評分存在一週。我想按以下順序獲得評級:
首先檢查區域,牧場和田地 - 如果對這個組合的評級存在,那麼得到它,否則如果評級不存在,則檢查區域和牧場組合,如果對這個組合的評級存在,那麼得到它如果評級不存在,然後檢查地區的位置獲得評級。
注意:
可以有多個等級存在對第1周,即可以存在地區和牧場,可以存在區,牧場和場等等......
我需要獲得記錄明智的,
SELECT *
FROM #tmpGroundPreferenceProfile GPP
INNER JOIN #tmpGroundPreferenceLocations GPL
ON GPL.GroundPreferenceProfileId = GPP.Id
INNER JOIN #tmpGroundPreferenceRatings GPR
ON GPR.GroundPreferenceLocationId = GPL.Id
WHERE GPP.Id = 1
AND GPR.[Week] IN (1,3,4)
任何幫助你們是高度讚賞。
你可以發佈查詢所需的結果嗎? – Taryn
這裏有一個小提琴,如果有人需要:http://www.sqlfiddle.com/#!6/4808f/2/0 –
不清楚這裏。你想每週記錄一次?每個配置文件每週一個記錄? –