2009-09-19 45 views
0

我正在做大约5个不同表的左外连接到我的表,我只需要这5个表中的一个的结果。5个连接?只需要其中一个结果,但顺序很重要?

现在我知道我可以使用Coalesce来得到我想要的。但是,我想知道是否有一种方法可以告诉SQL在一个左连接命中时不会继续加入。但是,左外部连接需要按照我写入查询时的相同顺序发生。

回答

0

使用UNION ALL将5个单独的外部连接查询粘合在一起,并取第一行。

+0

UNION ALL将提供由五个查询中的任何一个返回的任何值。 UNION会过滤出重复项。 – 2009-09-19 05:59:50

0

一般来说,除非你只需要一行和一列,否则你不能这样做。也许我应该说你可能能够找出一个钝的方法来做到这一点,但你应该而不是

SQL Server通常不会一次访问单个行,因为这实际上效率很低,而是会尝试通过一次对其进行多次搜索将其I/O堆叠到一张表中,甚至扫描整个表或其整个部分。在这种情况下,停止并考虑下一个单一记录是否经常太慢。

所以我的建议是只使用COALESCE并让SQL Server对它进行排序。

1

您可以将LEFT JOIN的查询转换为使用EXISTS,效率更高。

而且这也许是你的意图;满足条件时停止查找/连接。

相关问题