Sql 使用聚集索引的内部联接约束(需要空值)
我创建了一个集群索引视图,它将查询时间减少了4倍。主要的问题是,在这样做时,我无法使用完整的外部联接,结果丢失了数据集20%的记录(空值对于后验变换很重要) 有没有办法在使用内部联接时保持空值 我尝试了几件事,但都没有成功:Sql 使用聚集索引的内部联接约束(需要空值),sql,sql-server,clustered-index,Sql,Sql Server,Clustered Index,我创建了一个集群索引视图,它将查询时间减少了4倍。主要的问题是,在这样做时,我无法使用完整的外部联接,结果丢失了数据集20%的记录(空值对于后验变换很重要) 有没有办法在使用内部联接时保持空值 我尝试了几件事,但都没有成功: 这是我的索引定义: 创建唯一的聚集索引UIX\u STG\u Movements\u Prec\u DO\n 关于STG_运动(GBMPNOPR、GBMPNORN、GBMPNSEQN、GBMPNDOC、GBMPVLR) 有解决办法吗 Inputs: Table
创建唯一的聚集索引UIX\u STG\u Movements\u Prec\u DO\n
关于STG_运动(GBMPNOPR、GBMPNORN、GBMPNSEQN、GBMPNDOC、GBMPVLR)
有解决办法吗
Inputs:
Table gbmp
OPR | Natr
1 | DO
2 | DO
3 | CC
4 | CRF
Table gbnatr
OPR | Natr
1 | DO
2 | DO
3 | CC
4 | EFT
Desired output:
OPR | Natr
1 | DO
2 | DO
3 | CC
4 | NULL
Output obtained:
OPR | Natr
1 | DO
2 | DO
3 | CC
如果数据中有
NULL
值并且需要内部联接,则可以尝试:
SELECT *
FROM dbo.gbmp mp JOIN
dbo.gbnatr ntr
ON mp.GBMPNATR = ntr.NTNATR
UNION ALL
SELECT *
FROM dbo.gbmp mp JOIN
dbo.gbnatr ntr
ON mp.GBMPNATR IS NULL AND nt.NTNATR IS NULL;
这应该在列上使用适当的索引
编辑:
你似乎想要:
SELECT mp.OPR,
(CASE WHEN mp.Natr = ntr.Natr THEN mp.Natr END) as Natr
FROM dbo.gbmp mp JOIN
dbo.gbnatr ntr
ON mp.OPR = ntr.OPR
我迷路了。数据中的
NULL
s是由完全联接产生的还是由产生的?样本数据和期望的结果会有所帮助。使用左连接到dbo.gbnatr
,不要在上的中使用ISNULL
和ISNULL
?示例数据和预期结果将帮助我们帮助您。@GordonLinoff我在原始查询中使用的左连接产生的NULL。我在这里发布的查询用于视图创建only@Larnu这是一个群集视图。我是个新手,但就我所知,我不能在Schemabinding集群视图中使用左连接,对吗?这就是为什么我要求提供示例数据和预期结果,@mburns。不知道你到底是什么之后,我们不得不猜测。谢谢你的回答,但我没有得到想要的答案output@mburns . . 这看起来像是一个简单的case
逻辑,带有一个join
。这也不行。我想我解释错了,但谢谢你的见解
SELECT *
FROM dbo.gbmp mp JOIN
dbo.gbnatr ntr
ON mp.GBMPNATR = ntr.NTNATR
UNION ALL
SELECT *
FROM dbo.gbmp mp JOIN
dbo.gbnatr ntr
ON mp.GBMPNATR IS NULL AND nt.NTNATR IS NULL;
SELECT mp.OPR,
(CASE WHEN mp.Natr = ntr.Natr THEN mp.Natr END) as Natr
FROM dbo.gbmp mp JOIN
dbo.gbnatr ntr
ON mp.OPR = ntr.OPR