2014-07-25 70 views
0

我有三個表:StationMonthlyNormalDataSubArea。我試圖讓一個子區域內的所有站點至少有一個月的數據與之相關聯。用下面的查詢,我能得到一個子區域中的所有站點,但是這是無視有關月度數據的部分($區域是在我的PHP腳本包含該區域名稱的變量):通過SQL查詢獲取所有具有由另一個表中的FK鏈接的數據的行

SELECT S.station_id, S.name, SA.sub_area_name 
FROM dev.Station AS S 
INNER JOIN dbo.SubArea AS SA ON S.sub_area_id = SA.sub_area_id 
WHERE sub_area_name = '$region' 

我也嘗試了以下查詢,但是它爲每個與站點關聯的每月數據返回一行,這實際上並不是我正在查找的內容(僅查找能夠向我發送至少具有一個月數據的站點名稱的內容與其相關的並非所有包含該數據的行):

SELECT S.station_id, S.name, SA.sub_area_name 
FROM dev.Station AS S 
INNER JOIN dbo.SubArea AS SA ON S.sub_area_id = SA.sub_area_id 
INNER JOIN data.MonthlyNormalData as MND ON MND.station_id = S.station_id 
WHERE sub_area_name = '$region' AND MND.value IS NOT NULL 

查詢我需要運行只有一行pe哪個電臺在某個子區域內有與其相關的月度數據?

回答

1

你可以使用DISTINCT在你的第二個查詢來刪除重複的行:

SELECT DISTINCT ... 
1

因爲你是從表中StationSubArea使用Distinct會爲你工作只是返回的記錄。

SELECT distinct S.station_id, S.name, SA.sub_area_name 
FROM dev.Station AS S 
INNER JOIN dbo.SubArea AS SA ON S.sub_area_id = SA.sub_area_id 
INNER JOIN data.MonthlyNormalData as MND ON MND.station_id = S.station_id 
WHERE sub_area_name = '$region' AND MND.value IS NOT NULL 

另一種方式去了解它是使用exist

SELECT S.station_id, S.name, SA.sub_area_name 
FROM dev.Station AS S 
INNER JOIN dbo.SubArea AS SA ON S.sub_area_id = SA.sub_area_id 
WHERE exists (select 1 from data.MonthlyNormalData where station_id = S.station_id) and 
sub_area_name = '$region' 
相關問題