这个问题可能有一个明显的答案,但我有一点时间可以随时随地使用它。
考虑查询:
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 r.report_id NOT IN( SELECT DISTINCT report_id FROM exclude_report )
在此查询中,exclude_report
是以类似方式构建的视图。
现在发生的事情是查询花了很长时间才能执行,可能是因为子查询正在父查询中的每一行上执行。但是,我发现任何其他方式都没有可行的方法。
哦,伟大的SQL向导,请指教。我真的需要一种在SQL中执行此操作的方法,我将在SSRS中使用它。
答案 0 :(得分:4)
distinct可能会杀死你,在
中使用时,你不需要在子查询中有区别这样更好吗?
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)
答案 1 :(得分:0)
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
LEFT JOIN exclude_report er ON r.report_id = er.report_id
WHERE er.report_id IS NULL
答案 2 :(得分:0)
您不需要distinct关键字,这可能很重。我还建议你在大表的外键上添加索引。
答案 3 :(得分:0)
我认为你有以下指数:
report_id
上的report
表格report_id
reportvalues
表格metric_id
reportvalues
表格metric_id
metrics
表格report_id
exclude_report