跳过SQL Server子查询

时间:2012-04-18 12:43:05

标签: sql-server

我想像这样使用左外连接:

    SELECT ...
FROM Table1
LEFT OUTER JOIN
(SELECT only e.g. 3rd record... , SomeField FROM Table2) tbl2
  ON Table1.SomeField = tbl2.SomeField

如果我需要子查询不仅仅选择Table2中的第3条记录,而是选择具有SomeField = Table1.SomeField的Table2记录中的第3条记录,该怎么办? 感谢。

1 个答案:

答案 0 :(得分:0)

如果这是sql server 2005或更新版本,您可以使用row_number()

LEFT JOIN
(
   select *
     from
     (
       select *,
              row_number() over (order by something) rn
         from Table2
        where Table2.Column = Table1.Column
     ) a
    where a.rn = 3
) a

不幸的是,你需要将它嵌套到更深的层次,因为你不能直接在条件中使用row_number。

修改

我的坏 - 我没有真正注意到加入部分。如果要加入派生表,请使用:

LEFT JOIN
(
   select *,
          row_number() over (partition by SomeField order by something) rn
     from Table2
) tbl2
  ON Table1.SomeField = tbl2.SomeField
 AND tbl2.rn = 3

注意:你需要在row_number()中使用ORDER BY来保持一致。