需要根据用户输入构建动态查询并从结果集中发送记录计数。
所以有6个表我需要建立一个连接内部肯定和休息表连接将基于用户输入,这应该是性能导向。
这是要求
select count(A.A1) from table A
INNER JOIN table B on B.B1=A.A1
INNER JOIN table B on C.C1=B.B1
INNER JOIN table D on D.D1=C.C1
INNER JOIN table E on E.E1=D.D1
INNER JOIN table F on F.F1=E.E1
现在,如果用户在UI中选择一些值,则必须执行查询
select count(A.A1) from table A
INNER JOIN table B on B.B1=A.A1
INNER JOIN table B on C.C1=B.B1
INNER JOIN table D on D.D1=C.C1
INNER JOIN table E on E.E1=D.D1
INNER JOIN table F on F.F1=E.E1
INNER JOIN table B on G.G1=F.F1
Where G.Name like '%Germany%'
用户可以发送1-5个选项,并且必须构建查询并相应地发送结果集
因此,如果我首先添加所有连接,然后根据选择添加where子句,那么查询将很容易并且达到目的,但如果用户没有选择任何查询,那么我正在为用户选择创建不必要的连接。
因此,更好的方法是提前编写所有连接,然后使用动态查询过滤或按需加入和使用过滤器。
如果有人可以提供有价值的投入,那就太棒了。
答案 0 :(得分:0)
当SQL Server执行查询时,第一步是规划查询,即决定获取查询结果的策略。
如果您使用"内部联接"你必须包括所有表格,因为内部加入"表示连接的两个表上必须有匹配的行,因此查询规划器不能任何表格。
但是,如果通过左外连接更改内连接,则连接两侧都没有匹配的行,因此查询规划器可以决定它是否包含在对。因此,如果使用左外连接,并且不对连接右侧的字段进行选择,过滤或执行任何操作,则查询计划程序可以在执行查询时丢弃。这是解决问题的最简单方法。
另一方面,如果要控制要包含或不包含的表,并为每种情况创建自定义查询,可以使用以下几种技术: