交叉应用在sql server中

时间:2011-06-09 21:56:07

标签: sql-server-2008 cross-apply

最近我的存储过程出现问题,工作速度太慢,所以我的一位同事建议交叉应用,他说交叉应用工作作为内连接,但不需要表之间的comman键。 / p>

我的senario是我有三个表crossarticle_articlecrossarticle_articletocategory以及crossarticle_article 现在我想要检索categoryid为4,categoryid存储在crossarticle_articletocategory

中的所有记录

据我所知,我创建了以下查询:

SELECT *
FROM   crossarticle_article c
       CROSS APPLY
crossarticle_articletocategory cc1
CROSS APPLY
crossarticle_category cc2
WHERE  cc2.id = 1

此查询应仅返回类别ID与1匹配的crossarticle_article的记录 但它返回所有3个表中的所有记录。

我错了, 如果这不是使用交叉应用的方式,那么如何使用,以及它的优势。

交叉应用是否适用于相同的表格...如果是,那么情景可能......

1 个答案:

答案 0 :(得分:1)

假设id是所有表中的关键字段,则Query应为:

SELECT c.*,
       c1.colXXX,
       c2.colYYY --ALL columns  u need
FROM   crossarticle_article c
       CROSS APPLY(
    SELECT cc1.colXXX
    FROM   crossarticle_articletocategory cc1
    WHERE  cc1.id = c.id
) c1
CROSS APPLY(
    SELECT cc2.colYYY
    FROM   crossarticle_category cc2
    WHERE  cc2.id = c.id
) c2
WHERE  c.id = 4