0

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

    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 条记录,我该怎么做?谢谢。

4

1 回答 1

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 以保持一致。

于 2012-04-18T12:48:10.140 回答