这有点难以解释,但我会尽我所能。我有一个数据库,维护有关海运等信息。我有以下栏目可供使用。 (还有其他但它们对我的研究没有任何目的)我有Message_ID,纬度,经度,MMSI(这代表单个船舶信号,因此它们对于船舶是唯一的)Ship_type,Vessel_name。
所以这就是问题
基本上我需要做的是将Ship_type和Vessel_name附加到Message_ID为1和3的行,方法是通过Message_ID 5共享的MMSI号码加入。
到目前为止我的查询..
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
答案 0 :(得分:2)
我可能会这样做:
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
答案 1 :(得分:0)
with ship_cte(Ship_type,Vessel_name,MMSI)
as(select Distinct Ship_type,Vessel_name,MMSI from TableName WHERE Message_ID = 5)
select b.Ship_type,b.Vessel_name,a.other_columns
from tableName a join ship_cte b on a.MMSI=b.MMSI
WHERE (a.latitude > 55 and a.latitude < 85 and a.longitude > 50 and a.longitude < 141)
And (a.Message_ID = 1 or a.Message_ID = 3);
在查询的第一部分中,我获取了message_id = 5的所有行的ship_type和vessel_name,然后我将基于MMSI编号将主要表加入查询的这一部分。
答案 2 :(得分:0)
我想你想要这样的东西:
select Message_ID, Latitude, Longitude, MMSI, x.Ship_type, x.Vessel_name
from table t
outer apply (select Ship_type, Vessel_name from table x where x.MMSI=t.MMSI and x.Message_ID=5) x
where t.Message_ID in (1,3) and (latitude > 55 and latitude < 85 and longitude > 50 and longitude < 141);