0

我在使用外部应用的 SQL 服务器中有一个查询。现在我想对其进行转换,以便查询也可以在 SQL 服务器和 MySQL 上运行。

select top 5 v.sVehicleName as VehicleNo, ll.Location 
from vehicles v
outer APPLY
     (select top 1 Location 
      from location_history 
      where vehicle_id = v.vehicle_id) ll

我必须隐藏这个查询,以便我可以在两个数据库上运行。

这是我的桌子

create table #vehicles (vehicle_id int, sVehicleName varchar(50))

create table #location_history ( vehicle_id int, location varchar(50), date datetime)

insert into #vehicles 
values
(1, 'MH 14 aa 1111'), 
(2,'MH 12 bb 2222'),
(3,'MH 13 cc 3333'),
(4,'MH 42 dd 4444')

insert into #location_history
values
 ( 1, 'aaa', getdate()),
 ( 1, 'bbb', getdate()),
 ( 2, 'ccc', getdate()),
 ( 2, 'ddd', getdate()),
 ( 3, 'eee', getdate()),
 ( 3, 'fff', getdate()),
 ( 4, 'ggg', getdate()),
 ( 4 ,'hhh', getdate())

这是我在 SQL Server 中执行的查询。

select v.sVehicleName as VehicleNo, ll.Location 
from #vehicles v
outer APPLY
  (select top 1 Location 
      from #location_history 
      where vehicle_id = v.vehicle_id) ll

这是 SQL 服务器中的输出。

车辆编号 地点
MH14 AA 1111 啊啊啊
MH12 BB 2222 ccc
MH13 cc 3333 eee
MH42 dd 4444 ggg

我想在 MySQL 中执行这个。我想要上面提到的相同输出。

4

2 回答 2

1

在这种情况下,您可以使用 LEFT JOIN 而不是 OUTER APPLY。像那样:

select top 5 v.sVehicleName as VehicleNo, ll.Location 
from vehicles v
left join
     (
     select vehicle_id, min(Location) as Location
     from location_history 
     group by vehicle_id
     ) ll 
on ll.vehicle_id = v.vehicle_id
于 2016-04-13T06:49:21.620 回答
0

如果您想从位置历史表中首先记录车辆表中存在的每辆车,那么您可以使用cross join.

见下文,例如

create table #location (vehicle_id int, vehicle_name varchar(50))

create table #lochistory ( vehicle_id int, location varchar(50), date datetime)



insert into #location 
values
(1, 'car'), 
(2,'bus'),
(3,'auto'), 
(4,'jeep')

insert into #lochistory
values
 ( 1, 'india', getdate()),
 ( 1, 'usa'  , getdate()),
 ( 2, 'india', getdate())



select *from #location l
cross join
(
 select top 1 * from #lochistory 
)b

输出将如下所示。

vehicle_id  vehicle_name    vehicle_id  location    date
1           car             1           india       2016-04-13 05:21:57.650
2           bus             1           india       2016-04-13 05:21:57.650
3           auto            1           india       2016-04-13 05:21:57.650
4           jeep            1           india       2016-04-13 05:21:57.650
于 2016-04-13T12:11:49.663 回答