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

标签 mysql sql-server join left-join where-clause

我是 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最好的方法,它narrowed downWHERE声明或 JOINs .

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

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

提前致谢!

更新

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

一个是dbo.Project表,其中包含:PK,CategoryKey(FK)(连接到第二个表中的那个),Name,Description,以及所有其他不相关的参数。

第二个是 dbo.Area 表,其中包含:PK、AreaNumber、Name、CategoryKey (FK)、IsCategory(1 = 是类别,0 = 不是类别)。

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

最佳答案

根据您提供的信息,最佳解决方案是结合使用 WHERE 子句和 JOINS。您可能需要在第二个表(在更新中描述)上使用 WHERE 子句来选择所有属于类别的行。然后,您会将此结果与其他表/数据一起加入。最后,您可以使用 CASE 子句(详情见 here )来检查您的变量并确定您是需要所有类别还是只需要一些类别(可以通过额外的 WHERE 子句处理)。

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

关于mysql - SQL Left/Inner/Normal Join vs Where while 条件语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38599175/

相关文章:

mysql - 如何在 MariaDb 中使用排名函数

mysql - 全文搜索 - 索引不会在 OR 搜索上触发,但会在 AND 搜索上触发

mysql - 如何使用 Python 或 SQL 中的联接或任何其他操作合并两个数据集/表

MySQL 查询从两个表中接收随机组合

mysql - 我怎样才能选择性地加入

mysql - 使用另一个表中的计数进行排序

MySQL SHA2 函数似乎不起作用

c# - 将日期时间作为包含数量字段的列的 SQL 透视

sql-server - SSIS:不同驱动程序的两个不同错误。一个是 32 位的,另一个是 64 位的。以 32 位运行导致另一个驱动程序失败

sql - 在 SQL Server 2008 中使用 PIVOT