具有多个字段的子查询

And*_*rey 1 sql sql-server subquery multiple-columns

我有SQL查询:

SELECT DISTINCT t1.inn, 
                t1.idx, 
                (SELECT TOP 1 adr 
                 FROM   t2 
                 WHERE  t2.idx = t1.idx 
                        AND t2.inn = t1.inn) ADR, 
                (SELECT TOP 1 name 
                 FROM   t2 
                 WHERE  t2.idx = t1.idx 
                        AND t2.inn = t1.inn) NAME 
FROM   t1 
Run Code Online (Sandbox Code Playgroud)

是否可以将一个子查询改为两个子查询?(即同时选择TOP 1 ADR和NAME).服务器:MS SQL 2008-2012.

Gor*_*off 5

你可以这样做cross apply:

select distinct t1.INN, t1.IDX, t2.adr, t2.name
from t1 cross apply
     (select top 1 adr, name
      from t2
      where t2.idx = t1.idx and t2.inn = t1.inn
     ) t2;
Run Code Online (Sandbox Code Playgroud)

但是,您选择的是没有订单的行.如果只有一行匹配,则可以使用常规连接执行此操作.