2016-10-05 19 views
0

我面臨一個很奇怪的問題重複行我喜歡運行一個查詢:獲取在我的SQL查詢

SELECT pif.Lat, pif.Lon, pif.IdPlaya, pif.NombrePlaya, ipm.marm, ipm.mart, ipm.marn, 
     ipm.dirm, ipm.dirt, ipm.dirn, ipv.velmax_m, ipv.velmax_t, ipv.velmax_n, 
     ipp.tmax, ipp.simbm, ipp.simbt, ipp.simbn,ipm.diaprev 
FROM meteo.dbo.SYS_PLATGES_INFO_FULL_TEMP Pif, 
     meteo.dbo.in_previsio_poblacio Ipp, 
     meteo.dbo.sys_platges_detall Spd, 
     meteo.dbo.in_previsio_mars Ipm, 
     meteo.dbo.in_previsio_vents Ipv 
WHERE Ipp.idpob = Pif.IdPoblacion 
     AND Ipp.diaprev = '05-10-2016 0:00:00' 
     AND Spd.IdCiutat = Pif.IdPoblacion 
     AND Ipm.id = Spd.IdCosta 
     AND Ipm.diaprev = '05-10-2016 0:00:00' 
     AND Ipv.id_previsio = Pif.IdPoblacion 
     AND Ipv.data_previsio = '05-10-2016 0:00:00' 
GROUP BY pif.NombrePlaya,pif.Lat,pif.Lon,pif.IdPlaya,ipm.marm,ipm.mart,ipm.marn 
     ipm.dirm,ipm.dirt,ipm.dirn,ipv.velmax_m,ipv.velmax_t,ipv.velmax_n,ipp.idpob, 
     ipp.tmax,ipp.simbm,ipp.simbt,ipp.simbn,ipm.diaprev 

和一些表有一個複製一個這樣的:

query result

看看德爾託雷斯,如果你提到這兩者(NE/SE)有所不同。所以我去了爲這一列提供數據的表格,並在meteo.dbo.in_previsio_mars中搜索了地點ID的記錄,但在同一日期只有一條記錄存在,但是在運行查詢後有2條記錄用於該日期,並且沒有其他記錄包含

NEËSE

,如果你有相同的先進經驗,如果你和我一起分享我會很高興。

更新1:

表結構 enter image description here

+0

這不是一個真正的答案你的問題,只是一些很好的建議。請仔細閱讀以下內容:[踢壞的習慣:使用舊式JOIN](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old- style-joins.aspx) –

+0

meteo.dbo.in_previsio_mars肯定必須包含您在單行中提到的'NE E SE'組合 - 就我所見 - 您需要仔細檢查,確保您正在查看正確的數據庫/表等。 – Cato

+0

@AndrewDeighton它似乎一切正常...讓我再次檢查一切 – Blacksword

回答

1

如果您在in_previsio_mars表有一個鏈接到SYS_PLATGES_INFO_FULL_TEMP表請添加它在WHERE(JOIN)的條件,如你與其他表進行in_previsio_vents

事實上:

您有:

AND Ipv.id_previsio = Pif.IdPoblacion 

如果可以,添加:

AND Ipm.id_previsio = Pif.IdPoblacion 

最後,我建議你用一個明確的JOIN符號如下:

SELECT 
    pif.Lat, pif.Lon, pif.IdPlaya, pif.NombrePlaya, 
    ipm.marm, ipm.mart, ipm.marn, 
    ipm.dirm, ipm.dirt, ipm.dirn, ipv.velmax_m, ipv.velmax_t, ipv.velmax_n, 
    ipp.tmax, ipp.simbm, ipp.simbt, ipp.simbn,ipm.diaprev 
FROM meteo.dbo.SYS_PLATGES_INFO_FULL_TEMP Pif 
    JOIN meteo.dbo.in_previsio_poblacio Ipp 
     ON Ipp.idpob = Pif.IdPoblacion 
    JOIN meteo.dbo.sys_platges_detall Spd 
     ON Spd.IdCiutat = Pif.IdPoblacion 
    JOIN meteo.dbo.in_previsio_mars Ipm 
     ON Ipm.id = Spd.IdCosta 
     AND Ipm.id_previsio = Pif.IdPoblacion 
    JOIN meteo.dbo.in_previsio_vents Ipv 
     ON Ipv.id_previsio = Pif.IdPoblacion 
WHERE Ipp.diaprev = '05-10-2016 0:00:00' 
    AND Ipm.diaprev = '05-10-2016 0:00:00' 
    AND Ipv.data_previsio = '05-10-2016 0:00:00' 
GROUP BY 
    Pif.NombrePlaya,Pif.Lat,Pif.Lon,Pif.IdPlaya,Ipm.marm, 
    Ipm.mart,Ipm.marn,Ipm.dirm,Ipm.dirt,Ipm.dirn,Ipv.velmax_m, 
    Ipv.velmax_t,Ipv.velmax_n,Ipp.idpob,Ipp.tmax,Ipp.simbm,Ipp.simbt, 
    Ipp.simbn,Ipm.diaprev 

這樣你採取控制了JOIN條件和WHERE條件(在INNER JOIN中可以相同,但如果使用OUTER JOIN含義變更)

+0

讓我更新我的職務,以顯示錶 – Blacksword

+1

@Blacksword的結構:好吧,我在這裏; ) –

+0

也沒有Ipm.id_previsio存在 – Blacksword