Sql 如何连接两个不同表的列

Sql 如何连接两个不同表的列,sql,sql-server,Sql,Sql Server,我有两张表,分别是“概述”和“当前电压”。我想在一个表输出中获得两个不同表的前1条记录 sql查询 select top 1 VL1,VL2,VL3 from current_voltage where deviceimei ='233' order by devicetimestamp desc union select top 1 OTI,WTI,ATI from overview where deviceimei ='233'

我有两张表,分别是“概述”和“当前电压”。我想在一个表输出中获得两个不同表的前1条记录

sql查询

    select top 1  VL1,VL2,VL3 from current_voltage
    where deviceimei ='233'
    order by devicetimestamp desc      
    union
    select top 1  OTI,WTI,ATI from overview
    where deviceimei ='233'
    order by devicetimestamp desc
请求操作

VL1,VL2,VL3,OTI,WTI,ATI
234,235,234,25,24,25

一个简单的连接就可以了。我们开始:

SELECT TOP 1 cv.VL1, cv.VL2, cv.VL3, ov.OTI, ov.WTI, ov.ATI
FROM current_voltage cv
JOIN overview ov
ON cv.deviceimei = ov.deviceimei
WHERE cv.deviceimei ='233'
ORDER BY cv.devicetimestamp DESC, ov.devicetimestamp DESC

要阅读有关sql中联接的更多信息,请参阅

您需要两个查询的交叉联接:

select t1.*, t2.*
from (    
    select top 1  VL1,VL2,VL3 from current_voltage
    where deviceimei ='233'
    order by devicetimestamp desc      
) t1 cross join (
    select top 1  OTI,WTI,ATI from overview
    where deviceimei ='233'
    order by devicetimestamp desc
) t2
也可以使用横向连接:

select vc.*, ov.*
from current_voltage cv cross apply
     (select top (1) ov.*
      from overview ov
      where ov.deviceimei = cv.deviceimei 
      order by ov.devicetimestamp  desc
     ) ov 
where ov.deviceimei ='233'
order by cv.devicetimestamp  desc;