在sql server中交叉应用
Posted
技术标签:
【中文标题】在sql server中交叉应用【英文标题】:cross apply in sql server 【发布时间】:2011-06-09 21:56:06 【问题描述】:最近我的存储过程出现问题,运行速度太慢,所以我的一位同事建议交叉应用,他说交叉应用作为内部连接工作,但不需要表之间的命令键。
我的情况是我有三个表 crossarticle_article
和 crossarticle_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
这个查询应该只返回来自crossarticle_article
的记录,其中类别 id 匹配 1
但它会返回所有 3 个表中的所有记录。
我哪里出错了, 如果这不是使用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
【讨论】:
以上是关于在sql server中交叉应用的主要内容,如果未能解决你的问题,请参考以下文章