SQL Server 2008 复杂查询和表连接

标签 sql sql-server t-sql

这有点难以解释,但我会尽力。我有一个数据库,用于维护海运等信息。我有以下几列可供使用。 (还有其他的,但它们对我的研究没有任何目的)我有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/

相关文章:

sql-server-2008 - 空白而不是零

sql-server - 将一个表中的数据连接到另一表中的有序值之间

sql - 在MSSQL中模拟group_concat,列名不明确?

sql - 使用自动生成的列填充另一列

sql-server - 在 SQL Server : how do I remove empty elements from nested elements when LEFT OUTER JOIN'ing 中使用 FOR XML AUTO 时

php - 如何获得此代码的输出。有时显示输出,有时不显示?

sql-server - TSQL 分组数据集

sql - 当数据库被移动到另一个服务器/实例时如何识别它

java - 从数据库中搜索并显示输出

c# - 按邮政编码查找产品 |半正弦算法 |表现