需要澄清哪里不存在条款

时间:2015-08-09 10:30:04

标签: sql sybase sybase-ase

我试图只将那些记录插入#AlistDealNames表中,其中DealName存在于#DistDeal表中但不存在于#AltDealNames表中。为此,我试着不存在条款。但它没有按预期工作。查询只是将记录转储到#AltDealNames表中。

insert into #AltDealNames
select d.DealName, d.ManagerScrubbed, d.BbgDealName, t.TrancheName,  t.StreetCusip, t.ISIN, t.BbgTrancheName 
from metric..Deal d join metric..Tranche t on d.DealName = t.DealName
where not exists(select 1 from #DistDeal dd join #AltDealNames ad on ad.DealName = dd.DealName) 

请在构建查询时帮助我知道我是否做错了什么。

2 个答案:

答案 0 :(得分:0)

如果我理解正确,您需要exists的{​​{1}}条款和#DistDeal的{​​{1}}条:

not exists

注意:使用#AltDealNames时,应始终包含列名列表。

答案 1 :(得分:0)

根据优化程序如何设置实际物理查询,在此查询插入任何内容之前,可能首先运行“where not exists”子句。也就是说,它只会过滤掉之前查询中的#AltDealNames中的值。

如果你试图避免插入#DistDeal中的DealName值,那么也许你想要:

insert into #AltDealNames
select d.DealName, d.ManagerScrubbed, d.BbgDealName, t.TrancheName,  
   t.StreetCusip, t.ISIN, t.BbgTrancheName
from metric..Deal d 
   join metric..Tranche t on d.DealName = t.DealName
where not exists(select 1 from #DistDeal dd 
             where d.DealName = dd.DealName)   -- Changed line