我目前有一個主表與其他多個表通過多對多連接(連接表)關聯。使用此數據庫的應用程序需要具有搜索功能,該功能將打印出符合特定條件的多行,包括連接表中的所有值。來自連接表的值也需要是能夠搜索與該值匹配的所有其他行的鏈接。我想弄清楚如何在不徵稅的情況下做到這一點。SQL Server多對多連接查詢
這裏是表結構的一個例子
**Metrics (Main Table)**
MetricID (pk)
Metric
**Domains (ValueList Table)**
DomainID (pk)
Domain
**MetricsDomains (Join Table)**
MetricsDomainsID (pk)
MetricID (fk)
DomainID (fk)
**MetricTypes (ValueList Table)**
MetricTypeID (pk)
MetricType
**MetricsMetricTypes (Join Table)**
MetricMetricTypesID (pk)
MetricID (fk)
MetricTypeID (fk)
**Studies (ValueList Table)**
StudyID (pk)
Study
**MetricsStudies (Join Table)**
MetricsStudiesID (pk)
MetricID (fk)
StudyID (fk)
當有人通過各種標準的公制搜索,他們應該得到以表格的形式輸出,看起來是這樣的:
Metric1 | Description | Study1, Study2, Study3 | MetricType1, MetricType2 | Domain1, Domain2
Metric2 | Description | Study5, Study2, Study4 | MetricType2, MetricType3 | Domain5, Domain9
的度量標準將成爲對度量標準完整描述的鏈接。然而,此外,研究(即研究1,研究2,研究3等)和MetricTypes(MetricType1,Metric2等)和域(Domain1,Domain 2等)也應該是鏈接,即當點擊時,將對包含該研究,類型或域的所有其他指標執行新的搜索。這使我相信,除了文本之外,爲了放置在href中,我還需要研究,類型或域的主鍵。
無論如何,考慮到一次搜索可能會返回20多個度量標準,我需要弄清楚的是編寫優化查詢以返回多個多對多連接的結果的好方法。我知道在一個查詢中加入所有這些表格通常會產生所有聯接的笛卡爾積,但我不確定是否有另一種方式去處理它。我也讀到一種方法,我可以用這樣的方法在外地返回的許多一對多結果作爲逗號分隔的列表:
SELECT m.MetricID, Description,
STUFF((
SELECT ', ' + s.Study
FROM Studies s, Metrics_Studies ms
WHERE s.StudyID = ms.StudyID AND ms.MetricID = m.MetricID
ORDER BY s.Study
FOR XML PATH('')
),1,1,'') as Study,
FROM Metrics m
WHERE Metric_PK = 13
但是,我不知道的對性能的影響這種方法,還是它會真正讓我找到我想要的,因爲我認爲我可能還需要研究的主鍵。
任何幫助,將不勝感激。
謝謝!
MetricsMetricTypes中的最後一個字段應該是MetricTypeID而不是DomainID嗎? – 2010-10-11 14:20:54
在你的joing表(即MetricsDomains)中,你是否真的需要一個單獨的PK(MetricsDomainsID),還是可以將它組合成兩個FK? (MetricID,DomainID)。這意味着你只能有一種組合,但是無論如何,這種感覺都是正確的。 – 2010-10-11 14:27:48
@Mark你說得對。我已經修復了原來的問題。 – Kirsehn 2010-10-11 18:13:22