排除与子查询匹配的记录

Sku*_*udd 4 sql t-sql sql-server-2005

这个问题可能有一个明显的答案,但我花了很长时间才得到它。

考虑以下查询:

选择 *
FROM 报告 AS r
JOIN 报告值 AS rv ON rv.report_id = r.report_id
JOIN 指标 AS m ON m.metric_id = rv.metric_id
其中 r.report_id 不在(
    选择不同的report_id
    来自排除报告
)

在此查询中,exclude_report是以类似方式构建的视图。

现在发生的情况是查询需要非常长的时间来执行,大概是因为子查询正在父查询中的每一行上执行。然而,我发现没有其他可行的方法来做到这一点。

哦,伟大的SQL向导,请指教。我确实需要一种在 SQL 中完成这一切的方法,我将在 SSRS 中使用它。

SQL*_*ace 5

不同的可能会杀了你,当使用 in 时,你不需要在子查询中使用不同的

这是否更好?

SELECT *
FROM reports AS r
JOIN reportvalues AS rv ON rv.report_id = r.report_id
JOIN metrics AS m ON m.metric_id = rv.metric_id
WHERE NOT EXISTS (SELECT 1 
        FROM exclude_report e 
        WHERE e.report_id = r.report_id)
Run Code Online (Sandbox Code Playgroud)