需要左外连接的帮助吗?

时间:2011-02-22 15:11:55

标签: sql sql-server-2005 sql-server-2008 left-join join

SELECT ID
 (
 Select ID from Table1
 where Table1.ID=@ID
 )T1
 Left Outer join
 (
 Select top 1 Table2.ID from Table2 join Table3 on table3.ID=Table2.ID 
 order by Table2.ID DESC
 )T2 on T2.ID=T1.ID

这只是我和我的实际存储过程的一个例子,我面临的问题是我无法从T2中检索它只返回为NULL但是当我更改它时,前5我是能够检索值。这个连接是否正确,是否有必要将左外连接内的部分放在哪里才能检索值?

3 个答案:

答案 0 :(得分:2)

如果您正在使用TOP,您需要决定所有选择(全部三个)如何订购数据,这样您就可以控制要回收的值,也可以更具体地说明您过滤的内容。

答案 1 :(得分:1)

一些观察结果。

  1. 您的T1 SELECT没有ORDER BY子句,那么您如何知道返回哪个TOP 250?

  2. 如果T2返回NULL,那么T1和T2之间没有匹配,可能是由于我的第一点?

答案 2 :(得分:1)

你到底想要完成什么?

您可以尝试这样的事情:

SELECT
   TOP 250 Table1.ID
FROM
   Table1
LEFT OUTER JOIN
   Table2 ON Table2.ID = Table1.ID
LEFT OUTER JOIN
   Table3 ON Table3.ID = Table2.ID
WHERE
   Table1.ID = @ID
ORDER BY
   Table1.ID DESC