簡體   English   中英

SQL Server多個多對多聯接查詢

[英]SQL Server multiple many-to-many join query

我目前有一個主表,並通過多對多聯接(帶有聯接表)將其與多個其他表關聯。 使用該數據庫的應用程序需要具有搜索功能,該功能將打印出符合特定條件的多行,包括連接表中的所有值。 聯接表中的值也需要是鏈接,以允許搜索與該值匹配的所有其他行。 我試圖弄清楚如何在不增加數據庫負擔的情況下執行此操作。

這是表結構的一個例子

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

但是,我不確定此方法對性能的影響,或者它是否真的能為我提供所需的信息,因為我認為我可能還需要研究的主鍵。

任何幫助,將不勝感激。

謝謝!

我建議您首先使用多聯接進行操作-然后才能知道性能是否足夠好。 與往常一樣,您必須提防過早的優化。 一旦針對規范化模型正確運行了查詢,就可以檢查查詢計划等。這可能會突出顯示您需要拼合一些聯接,如果那樣的話,您可能必須將數據存儲在兩個不同的位置格式,一種用於報告/一種用於搜索,等等。但是第一件事是查看性能是否確實可以接受。 希望有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM