2012-04-18 102 views
0

我想使用左外连接是这样的:跳过在SQL Server中的子查询

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

我如何能做到这一点,如果我需要子查询中选择不只是从表2的第三纪录,但第3个记录在具有SomeField = Table1.SomeField的Table2记录中? 谢谢。

+1

“第3条记录”是什么意思?除非您有ORDER BY子句,否则Resuts集合没有订单。你的例子虽然没有。你能否让你的例子更清楚? – 2012-04-18 12:45:36

+1

您可以请张贴表结构,您尝试的查询和**应该**的样子? – 2012-04-18 12:46:30

+0

真正的任务是将两个Table1和Table2中的数据移动到Table3中。目标Table3具有Field1,Field2和Field3,并且我需要Field1具有来自Table2.SomeField(第1条记录)的数据,Field2来自Table2.SomeField(第2条记录),Field3来自Table2.SomeField(第3条记录)。所以我试图用Table2离开外部连接Table1 3次,但选择不同的记录:1st,2nd和3rd。 – 2012-04-18 13:17:51

回答

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

+0

“你不能在你定义的地方使用row_number”,你可以直接通过row_number命令。 – 2012-04-18 12:49:59

+0

@tim是的,这是非常真实的。我不能在条件下使用它。 – 2012-04-18 12:51:11

+0

谢谢。我已经尝试过这种解决方案,但出现错误:无法绑定多部分标识符“Table1.Column”。 – 2012-04-18 12:59:31