这有点难以解释,但我会尽力。我有一个数据库,用于维护海运等信息。我有以下几列可供使用。 (还有其他的,但它们对我的研究没有任何目的)我有Message_ID,纬度,经度,MMSI(这代表单个船舶信号,因此它们对船舶来说是唯一的)Ship_type,Vessel_name。
这就是问题所在
- 我只需要 Message_ID 1 和 3。
- 遗憾的是,Message_ID 1 和 3 在各自的位置中 Ship_type 和 Vessel_name 为 Null。
- Message_ID 5 已标记 Ship_type 和 Vessel_name。
- 我的研究区域在给定的纬度和经度内
本质上,我需要做的是通过通过 Message_ID 5 共享的 MMSI 号码加入,将 Ship_type 和 Vessel_name 附加到 Message_ID 为 1 和 3 的行。
到目前为止我的疑问..
WHERE (latitude > 55 and latitude < 85 and longitude > 50 and longitude < 141) And (Message_ID = 1 or Message_ID = 3);
其他查询
WHERE Message_ID = 5;
如何将导致第二个查询的所有 Ship_type 和 Vessel_name 连接到第一个查询?
我觉得应该提到的是,所有内容都在一个名为 dbo.DecodedCSVMEssages_Staging 的表中,该表包含大约 1 亿个条目..:S
最佳答案
我可能会这样做:
SELECT
t13.Message_ID,
t13.Latitude,
t13.Longitude,
t13.MMSI,
t5.Ship_type,
t5.Vessel_name
FROM yourTable As t13
OUTER APPLY ( SELECT TOP 1 *
FROM yourTable As t5
WHERE t5.Message_ID = 5
AND t5.MMSI = t13.MMSI
) As t5
WHERE t13.Message_ID IN(1,3)
AND t13.latitude > 55
and t13.latitude < 85
and t13.longitude > 50
and t13.longitude < 141
关于SQL Server 2008 复杂查询和表连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18791024/