2016-07-26 54 views
2

我对SQL编程比较陌生,所以请对我轻松点。SQL左/内/正常连接vs条件语句的地方

我目前正在编写一个查询,它会根据其中一个外部参数的值输出结果。目前的结构看起来像以下:

@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上的最佳方法,并且它narrowed downWHERE语句或JOINs

我想知道的是:我应该为我的场景使用哪些方法?在我的情况下,优先级是优化(最短执行时间)和易于实现。

注:我主要在这里的目标是不接收准备在这里使用的代码(尽管一个例子的代码片段将受到欢迎),我只是想知道一个更好的方法,这样我就可以继续朝着这个方向研究。

预先感谢您!

UPDATE

我已经对数据库结构进行更多的研究,并设法把相关的问题

一个参数是dbo.Project表,其中包含:PK,CategoryKey(FK) (连接到第二个表中的那个),名称,描述和所有其他无关的参数。

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

对不起,但我工作在快节奏的环境中,这是我尽可能多的挤压。请让我知道,如果这是不够的。

+0

这在某种程度上取决于类别和子类别在数据库中的存储方式。 – BrandonM

+0

@BrandonM你能澄清一下吗?我现在可以回答的唯一方法是“1个类别内的4个子类别,每个子类别都有自己的标识符”。 –

+0

你能提供你的表格结构和一些样品数据吗?作为sql语句理想,因此我们可以为测试设置一个环境 – Philipp

回答

0

由于您提供的信息最好的解决方案是使用WHERE子句和JOINS的组合。您可能需要在第二个表(在更新中描述)上使用WHERE子句来选择所有属于类别的行。然后,你会加入这个结果与你的其他表/数据。最后,可以使用CASE子句(详细信息找到here)来检查变量并确定是否需要所有类别或仅需要一些类别(可通过附加的WHERE子句处理)。

不确定这完全回答你的问题,但对于更详细的答案,我们需要更详细的数据库模式描述。

+0

对不起,如果不够详细。但我会接受你的答案并进行其他研究。 –