0 0

数据库左连接问题3

我有四张表,tb_tree目录树表,tb_equip设备表,tb_subequip部件表,tb_material材料表

tb_tree表的主要字段有:id,parentID,type,name,number,其中type表示类型:000工厂 100装置 200工段  300设备 500部件 ,顺序即为父子关系。工厂为总节点,孩子为装置,以此类推。

tb_subequip表的主要字段有:subequipID部件ID在tb_tree中存在该ID的部件,material部件的材料对应材料表中的一个ID,lining部件的衬里对应材料表中的一个ID

tb_equip表的主要字段有:equipID设备ID在tb_tree表有对应的ID,equipType设备类型

tb_material表的主要字段有:materialID材料ID,materialNo材料的牌号。


其中部件表的中材料不能为空,衬里可以为空!

需要查询的问题是:从数据库中查询出除A20000,A30000,A40000(对应tb_tree表中name字段)三个工厂以外的所有设备类型为“a”(对应tb_equip设备表中的equipType字段),设备名称为“b”(对应tb_tree表中的name字段)的所有部件的材料和牌号信息。

当材料和衬里均不为空的时候,我写的SQL是可以使用的:SQL如下

select distinct
case when [S].[Lining] is null then  [M1].[MaterialNo]
when [S].[Lining] is not null then  [M1].[MaterialNo] + ' + ' + [M2].[MaterialNo]
end
[Material],
case when [S].[Lining] is null then  [M1].[MaterialID]
when [S].[Lining] is not null then  [M1].[MaterialID] + [M2].[MaterialID]
end
[Lining]

from [dbo].[tb_subequip] [S],
[dbo].[tb_material] [M1],
     [dbo].[tb_material] [M2]
where
      [S].[subequipID] in(
      select [T1].[ID] from [dbo].[tb_tree] [T1] where [T1].[Type]='500' and [T1].[ParentID] in  (
      select [T2].[ID] from [dbo].[tb_tree] [T2],[dbo].[tb_equip] [E] where [E].[EquipType]='a' and [T2].[ID] = [E].[EquipID] and [T2].[Type]='300' and [T2].[Name]='b' and [T2].[ParentID] in (
      select [T3].[ID] from [dbo].[tb_tree] [T3] where [T3].[Type]='200' and [T3].[ParentID] in (
      select [T4].[ID] from [dbo].[tb_tree] [T4] where [T4].[Type]='100' and [T4].[ParentID] in (
      select [T5].[ID] from [dbo].[tb_tree] [T5] where [T5].[Type]='000' and [T5].[Number] not in(
      'A20000','A30000','A40000'))))))
      and [S].[Material] = [M1].[MaterialID]
  and [S].[Lining] = [M2].[MaterialID]


但是当衬里为空时,由于最后一句的问题就出现了得不到想要的结果( and [S].[Lining] = [M2].[MaterialID]
)。

可以用左连接实现,但是我没写出来!!!


2010年8月24日 13:50
目前还没有答案

相关推荐

    数据库:左连接、右连接、全连接

    外连接(OUTER JOIN)是一种连接操作,用于查询多个表中的数据,但不 sadece 返回符合连接条件的数据行,而是返回左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中的所有数据行。外连接可以分为三种...

    oracle数据库 左连接 右连接 自连接 。。

    这里主要涉及三种类型的连接:左连接、右连接和自连接。理解这些连接方式对于有效地管理和查询数据库至关重要。 1. **左连接(Left Join)**: 左连接返回左表(也就是连接操作中指定的第一个表)的所有记录,以及...

    关于数据库连接的问题

    本文将围绕“关于数据库连接的问题”这一主题,深入探讨左连接、右连接以及内连接的概念与应用场景,并结合具体的示例来帮助读者更好地理解和掌握这些连接方式。 #### 二、基础知识回顾 在讨论具体类型的连接之前...

    oracle数据库表左连接右连接全连接的认识

    左连接和右连接的区别在于基准表的选择,左连接将左边的表作为基准表,全表数据都要显示,而右连接将右边的表作为基准表,全表数据都要显示。例如: `SELECT e.empno, e.ename, d.dname FROM emp e LEFT JOIN dept ...

    数据结构左右连接

    根据提供的文件信息,我们可以深入探讨数据结构中的左连接(Left Join)与右连接(Right Join),以及数据库中的授权操作。 ### 数据结构中的左连接与右连接 #### 左连接(Left Join) 左连接是一种数据库查询操作...

    数据库内外连接举例

    例如,如果我们有`a`表和`b`表,`a.id`与`b.parent_id`有对应关系,左连接的SQL语句可能如下: ```sql SELECT a.*, b.* FROM a LEFT JOIN b ON a.id = b.parent_id; ``` 右外连接(RIGHT JOIN 或 RIGHT OUTER JOIN...

    Oracle数据库左外连接

    Oracle连接有多中,我是在平常开发项目过程中用到的Oracle左连接进行了简单的阐述。

    数据库自连接应用范例(Oracle)

    4. **模拟外连接**:在某些情况下,自连接可以用来模拟左连接或右连接的效果,尤其是在旧版本的Oracle数据库中,可能没有提供完整的连接类型支持。 下面给出一个具体的Oracle自连接应用例子,假设我们有一个`...

    数据库的连接数和连接池

    数据库连接数是指系统中可以同时存在的连接数量,而连接池则是为了解决频繁的数据库连接创建和销毁问题的技术。下面我们来详细了解这两个概念。 数据库连接数的限制: 在了解数据库连接数之前,需要了解什么是连接...

    LabVIEW与SQL数据库的连接

    3. 在连接服务器时,可能会出现问题,可以通过右键点击我的电脑(或者是计算机),选择管理,然后启动相关服务来解决。 4. 连接成功后,在数据库上右键,选择新建数据库,命名即可。 在 LabVIEW 中创建表 创建...

    数据库表连接(内外、左右连接).docx

    【数据库表连接详解】 在关系型数据库管理中,表连接是一种重要的查询操作,它允许从多个相关表中检索数据。连接使得数据间的关联性得以展现,增强了数据查询的灵活性。通常,一个实体的信息可能分散在多个表中,...

    数据库 左连接 右连接 全连接用法小结

    本文主要讨论了四种类型的连接:内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)和全连接(FULL JOIN),这些都是SQL-92标准定义的FROM子句连接语法的一部分。 1. **内连接**: 内连接返回满足...

    C3P0数据库连接池

    C3P0数据库连接池和jar包,因为jdbc没有保持连接的能力,一旦超过一定时间没有使用(大约几百毫秒),连接就会被自动释放掉。而每次新建连接都需要140毫秒左右的时间,所以耗费时间比较多。若使用C3P0连接池来池化...

    数据库表连接(内外、左右连接).pdf

    数据库表连接是数据库管理系统中用于整合来自多个表的数据的关键操作,尤其在处理复杂查询和关联数据时至关重要。本文主要探讨了四种基本的表连接类型:内连接、外连接(包括左外连接、右外连接)以及交叉连接。 ...

    数据库左右链接

    本文将详细介绍三种主要的连接类型:**内连接(Inner Join)**、**左连接(Left Join)**、**右连接(Right Join)**。通过具体的例子来解释每种连接类型的含义及其应用场景。 #### 二、内连接(Inner Join) **内...

    数据库多表连接

    左连接返回左表(在JOIN语句之前提到的表)的所有记录,即使在右表中没有匹配项。如果右表中没有匹配,结果将显示NULL。例子5和6使用了左连接来查找未修课的学生和未上课的教师。 ```sql Select student....

    数据库连接查询相关外连接内连接

    【数据库连接查询详解】 在数据库管理系统中,查询是获取数据的核心操作。本篇文章将深入探讨数据库连接查询,包括内连接、外连接和交叉连接等,同时结合实例来帮助理解。 首先,了解数据库的基础架构。Oracle...

    数据库中各种连接详细描述

    数据库中左连接的详细描述 内连接:把两个表中数据对应的数据查出来 外连接:以某个表为基础把对应数据查出来(全连接是以多个表为基础) 左连接(左表中所有数据,右表中对应数据) 右连接(右表中所有数据,左...

    DBeaver连接mysql数据库图文教程

    **DBeaver 连接 MySQL 数据库的详细步骤** DBeaver 是一款强大的数据库管理工具,因其免费、开源且支持多种数据库的特点,深受开发者和DBA的青睐。它提供了直观的用户界面,使得数据库的管理和操作变得更加简单。...

    myeclipse连接mysql数据库

    ### MyEclipse 连接 MySQL 数据库的详细步骤与配置过程 在开发环境中,使用 MyEclipse 连接 MySQL 数据库是一项非常常见的操作。对于初学者来说,掌握这一技能可以帮助他们更高效地进行 Java 应用程序的开发。本文...

Global site tag (gtag.js) - Google Analytics