除非阻止分区中的所有记录,否则阻止记录

时间:2014-03-07 17:47:51

标签: sql algorithm

基本问题描述:
带有数据的大表,其中一些是无效的(由于先前的分辨率损失,大多数是“按设计”) 一个较小的表,列出了大表中字段子集的有效组合 一个有时具有“真实”无效数据的进程 - 小表认为无效的条目,但由于邮件文件中的配置错误或数据损坏而被“使用”(在这种情况下,文档被邮寄)。

目标 - 阻止分区上的无效条目(client-doc组合),但如果分区中的条目为0,则不阻止分区上的任何条目。基本上 - 如果所有这些都不好,耸耸肩并假设它们都足够好。

原始答案: 加入大小表(过滤连接),分区上不同。左连接结果和小表到大表,写入小表条目存在的条件(好行)或不存在的子查询条目(无有效条目),否则排除。

缺点 - 最终输入,大表X2,小表X2。大表在分区上是自联接的,从算法运行时的角度来看,这是非常痛苦的。

所以 - 问题:是否有更好的算法?

为Jim编辑 - 以具体术语谈论抽象算法:

表A - 大,包含数据,有分区,称之为“部分”
表B - 较小,包含验证数据。关键是所有字段,称之为“Filt”

select A.*  
from A  
left join B on A.Filt = B.Filt  
left join (select A.Part from A join B on A.Filt = B.Filt ) C on A.Part = C.Part  
where B.Filt is not null or C.Part is null

任何人都可以使用更好的查询生成相同的结果吗? (或者,坦率地说,任何不同的查询。)

我在MS Access中恭维,因此“为空”并避免“现有”(关键字)子查询 - 我相信这会使用不同的语法来实现相同的算法,尽管任何知道更好的人都欢迎纠正理论

0 个答案:

没有答案