【问题标题】:seeking SQL join example that removes offending records (row-removing row-cleansing SQL join)寻找删除违规记录的 SQL 连接示例(行删除行清理 SQL 连接)
【发布时间】:2020-10-30 10:52:34
【问题描述】:

有问题的 SQL 引擎是 SSMS (SQL Server Management Studio V18.5),尽管我怀疑该版本是否与此查询相关。

我有一个表 A,它是一个信息源。还有一个表 B,它是包含大约六个连接的复杂查询 X 的结果日志。工具处理该查询的输出以在外部工具中完成工作,然后将这些工作详细信息记录到表 C。

所以我们有:

  • 表-A:数据源
  • Complex-Query-X:产生工作项列表的多连接查询(Table-A 是它的众多来源之一)
  • 表-B:Complex-Query-X 随时间推移的输出结果列表
  • Table-C:Complex-Query-X 中的工作项列表,这些工作项在其上执行了工作量、完成的工作、工作的结果等

我试图创建的查询的目标是从上面的复杂查询中删除已经处理过的行(意味着它们出现在 Table-C 中)。此时的硬目标是减少工作量,因为有数十万条记录正在处理,而我们只想处理一次记录,因此使用结果集来限制待办事项列表是一个明显的目标。

我对 SQL 并不陌生,但我以前从未尝试过使用连接来删除记录。网上有大量参考资料涉及 SQL 连接、它们的方法和原因,但没有一个详细说明删除数据的方式符合我们的目标。

我还想到我老了,我可能会遗漏一些明显的东西,我应该只添加数据到我的大连接查询中,因此我在这里查询(例如——所以它不需要删除)。那是我动摇的地方吗?

【问题讨论】:

  • 你能添加一些示例数据吗?
  • 您是否考虑过在 WHERE 子句中使用 NOT EXISTS({ 表 C 中的匹配条件 } )?
  • 对不起,JH 我不被允许。谢谢 CE,您的反馈肯定培养了我们的最终选择和最终选择。
  • 请参阅How do comment @replies work? 以学习使用@x 通知一位非唯一非发布者评论者x 重新发表评论。

标签: sql sql-server left-join inner-join record


【解决方案1】:

答案最终是一系列选项,我从中选择了第三个:

  • 限制原始查询,因此在核心查询运行后“要删除的数据”不存在 - 考虑到数据放在一起的方式(数十万行,大约七(7 ) 来源),但至少是可以想象的。
  • 查询连接结构后期的左连接标准,强制在不匹配的行上使用空键标识符(使它们很容易被使用所述查询的工具忽略)
  • 一个自动删除目标行的 where 子句——这是最简单的,并且在与其他两个查询选项的分析中也至少具有相对性能——所以如上所述,这实际上是我们选择的方向以及左-加入的原因在此不再详述

我个人感谢大家的意见和批评,就像他们一样。我个人很抱歉没有更坦率地了解实际源和数据样本的确切情况,雇用我的机构对这类事情非常保密,当我有其他的时候我太忙/懒得捏造足够的例子选项。

无论如何,这种类型的问题确实更具学术性,不需要硬性示例,我的意思是,如果我知道如果我站在读者的立场上,我自己实际上会更喜欢一个示例,如果我有选项。实际上,我确实为最终培养了我最终选择的派对草拟了一个快速的路线图,但即便如此,我也不想在公共场合发布。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 2017-07-02
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多