【问题标题】:Select only when Condition is true - SQL Server 2008仅在条件为真时选择 - SQL Server 2008
【发布时间】:2013-12-17 13:18:20
【问题描述】:

我有一个 ODS 表和一个审计表。在从 ODS 表中删除任何内容之前,我需要检查审计表。但是,现在,我正在这样做(如下);这在我的执行计划中创建了一个嵌套循环。我相信 SQL 服务器引擎正在检查每条记录的审计表(WHERE 子句)。有没有办法写这个,所以审计表只检查一次,我可以在没有嵌套循环的情况下对我的主键执行索引搜索?

我在 Informatica 源限定符中使用它。

SELECT
*Primary Key*
FROM
ODS_Table
WHERE
1 = (SELECT CASE WHEN 
      *Condition*
      THEN 1 ELSE 0 END
      FROM AUDIT_TABLE)

谢谢!!

【问题讨论】:

  • 您可以使用存储过程来满足这种需求,并将来自 AUDIT_TABLE 的结果存储在变量中,不是吗?
  • 这肯定行得通,但我需要它在一个选择语句中执行。

标签: sql sql-server-2008 informatica


【解决方案1】:

您可以改用JOIN

SELECT Primary Key
FROM ODS_Table
    JOIN AUDIT_TABLE ON *Condition*

这将确保来自ODS_Table 的行只有在满足AUDIT_TABLE 的条件时才会返回

【讨论】:

  • 感谢您的反馈。我确实试了一下,但它看起来像相同的执行计划。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多