【问题标题】:cross apply in sql server在sql server中交叉应用
【发布时间】:2011-06-09 21:56:06
【问题描述】:

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

我的情况是我有三个表 crossarticle_articlecrossarticle_articletocategorycrossarticle_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

这个查询应该只返回来自crossarticle_article 的记录,其中类别 id 匹配 1 但它会返回所有 3 个表中的所有记录。

我哪里出错了, 如果这不是使用cross apply的方式,那么如何使用,它的优点是什么。

交叉应用是否适用于相同的表......如果是这样,那么可能是什么场景......

【问题讨论】:

    标签: sql-server-2008 cross-apply


    【解决方案1】:

    假设 id 是所有表中的关键字段,查询应该是:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-16
      • 1970-01-01
      • 1970-01-01
      • 2019-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多