Sql 我使用多个查询来确定哪一组过滤器生成空表。有没有一种高效的方法可以通过一个查询来实现这一点?
我所面临的问题的一个例子 假设我有一个FilterClause集合和一个底层表。我想找出这些过滤器中哪些完全过滤掉了整个表,哪些没有 我目前正在执行许多这样的SQL查询(每个filterClause一个查询) 是否有更好的方法将所有这些调用分组到一个查询中,并获得一个结果集,该结果集是FilterClause到是否过滤掉整个表的映射?我考虑过使用CASE语句和UNION语句的方法,但我想知道是否有更有效的方法 作为另一个问题(可选),对于没有生成空表的每个子句,我想检查有关结果表的某些内容(例如,某个列是否具有严格的正值,或者是否所有列的所有行都不为空)。使用单查询每筛选器子句方法,我可以对单独筛选的表执行这些检查。对于如何在批处理级别执行这些检查,有什么建议吗Sql 我使用多个查询来确定哪一组过滤器生成空表。有没有一种高效的方法可以通过一个查询来实现这一点?,sql,tsql,Sql,Tsql,我所面临的问题的一个例子 假设我有一个FilterClause集合和一个底层表。我想找出这些过滤器中哪些完全过滤掉了整个表,哪些没有 我目前正在执行许多这样的SQL查询(每个filterClause一个查询) 是否有更好的方法将所有这些调用分组到一个查询中,并获得一个结果集,该结果集是FilterClause到是否过滤掉整个表的映射?我考虑过使用CASE语句和UNION语句的方法,但我想知道是否有更有效的方法 作为另一个问题(可选),对于没有生成空表的每个子句,我想检查有关结果表的某些内容(例如
提前谢谢 至于检查过滤器的效果:将表的总行数与匹配条件的行数进行比较:
select
count(*) as totalcount,
count(case when {filterClause1} then 1 end) as filter1count,
count(case when {filterClause2} then 1 end) as filter2count,
...
from table;
至于在一批中进一步缩小范围:目前还不清楚。对不起。我不确定我是否明白你的意思,但我认为你需要的是:
SELECT CASE WHEN NOT EXISTS
(SELECT * FROM table
WHERE {filterClause1})
THEN 1 ELSE 0 END as filterLabel1,
CASE WHEN NOT EXISTS
(SELECT * FROM table
WHERE {filterClause2})
THEN 1 ELSE 0 END as filterLabel2,...
这应该为您提供一个条件为真和为假的映射,如果您想验证更多条件,如果一个条件为真,我只有一个想法,并且它只允许您添加一个验证:
SELECT CASE WHEN NOT EXISTS
(SELECT * FROM table
WHERE {filterClause1})
THEN
(
Select CASE WHEN
{subFilterClause}
THEN 1 ELSE 0 END
)
ELSE 0 END as filterLabel1
显然,我不建议深入到这一步,最好在SQL端或应用程序端有一个过程来为您完成它
SELECT CASE WHEN NOT EXISTS
(SELECT * FROM table
WHERE {filterClause1})
THEN
(
Select CASE WHEN
{subFilterClause}
THEN 1 ELSE 0 END
)
ELSE 0 END as filterLabel1