SQL Left/Inner/Normal Join vs Where while 条件语句

SQL Left/Inner/Normal Join vs Where while conditional statement

我对 SQL 编程比较陌生,所以请放轻松。

我目前正在编写一个查询,它会根据其中一个外部参数的值输出结果。该结构目前如下所示:

@ShowEntireCategory bit = 0

select distinct
p.pk
p.name
--other columns
from dbo.Project P
--bunch of left joins
where p.Status = 'Open'
--other conditions

我要实现的是:当 ShowEntireCategory 的值为 1(通过单选按钮选择以编程方式更改)时,它将显示类别内所有子类别的记录。当它为 0 时,它只会显示来自所选子类别的记录,而该类别中的其他子类别保持不变。

我一直在表演a research on the best approach, and it to either WHERE statements or JOINs

我想知道的是:我应该为我的场景使用哪些方法?在我的例子中,优先考虑的是优化(最短执行时间)和易于实施。

注意:我在这里的主要目标不是在这里接收现成的代码(尽管欢迎使用示例代码片段),我只是想知道一个更好的方法,所以我可以继续朝那个方向研究。

提前致谢!

更新

我对数据库结构进行了额外的研究,并设法缩小到与问题相关的参数

一个是dbo.Projecttable,其中包含:PK,CategoryKey(FK)(连接到第二个table),Name,Description,以及所有其他参数无关紧要。

第二个是dbo.Areatable,包含:PK, AreaNumber, Name, CategoryKey (FK), IsCategory (1 = is category, 0 = not category).

对不起,我在快节奏的环境中工作,这是我能挤出来的。如果还不够请告诉我。

根据您提供的信息,最佳解决方案是结合使用 WHERE 子句和 JOINS。您可能需要在第二个 table 上使用 WHERE 子句(在更新中描述)到 select 所有属于类别的行。然后,您可以将此结果与其他 tables/data 合并。最后,您可以使用 CASE 子句(已找到详细信息 here)来检查您的变量并确定您是需要所有类别还是只需要部分类别(可以通过附加 WHERE 子句处理)。

不确定这是否完全回答了您的问题,但要获得更详细的答案,我们需要对数据库模式进行更详细的描述。