簡體   English   中英

具有M:N關系的SQL查詢

[英]SQL query with M:N relationship

我的數據庫中有以下表格:

sites (SiteID, SiteName)
parameters(ParameterID, ParameterName, ParameterUnits)
sites_parameters(SiteID, ParameterID)

一個站點可以測量零個或多個參數,例如,“藍湖”站點可以測量“溫度”和“水位”。

我需要編寫以下SQL查詢:查找測量所有指定參數的所有站點。 例如,找到在同一地點測量溫度,水位和壓力的所有地點。

對於兩個參數(假設參數ID為1和2),以下查詢有效:

SELECT s.SiteID, s.SiteName, p1.ParameterID, p2.ParameterID 
FROM sites s
INNER JOIN sites_parameters p1 ON s.SiteID = p1.SiteID
INNER JOIN sites_parameters p2 ON s.SiteID = p2.SiteID
WHERE p1.ParameterID = 1 AND p2.ParameterID = 2

如果我需要查找具有3個或更多參數的網站,該如何編寫查詢? 我設法使其起作用的唯一方法是為每個額外的參數添加一個額外的INNER JOIN語句:

SELECT s.SiteID, s.SiteName, p1.ParameterID, p2.ParameterID, p3.ParameterID 
FROM sites s
INNER JOIN sites_parameters p1 ON s.SiteID = p1.SiteID
INNER JOIN sites_parameters p2 ON s.SiteID = p2.SiteID
INNER JOIN sites_parameters p3 ON s.SiteID = p3.SiteID
WHERE p1.ParameterID = 1 AND p2.ParameterID = 2 AND p3.ParameterID = 3

還有其他寫查詢的方式嗎?

SELECT s.SiteID
FROM sites s
INNER JOIN sites_parameters p1 ON s.SiteID = p1.SiteID
WHERE p1.ParameterID IN (1, 2, 3)
GROUP BY s.SiteID
HAVING COUNT(*) = 3

要具有所有其他列:

SELECT s.SiteID, s.SiteName, p1.ParameterID
FROM sites s
INNER JOIN sites_parameters p1 ON s.SiteID = p1.SiteID
INNER JOIN (
   SELECT s.SiteID
   FROM sites s
   INNER JOIN sites_parameters p1 ON s.SiteID = p1.SiteID
   WHERE p1.ParameterID IN (1, 2, 3)
   GROUP BY s.SiteID
   HAVING COUNT(*) = 3
)sq ON s.SiteID = sq.SiteID

暫無
暫無

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

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