具有多个字段的子查询

时间:2013-12-24 04:29:52

标签: 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 

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

1 个答案:

答案 0 :(得分: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;

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