zoukankan      html  css  js  c++  java
  • exists语句使用的两个例子:

    案例一:

    现在有表A、AA、AAA

    业务如下:

    A、AA、AAA三个表依次是父子关系,即A是AA的父表、AA是AAA的父表

    现做如下的假设:

    A  ->库房

    AA->商品表,其中应用了库房的ID

    AAA->出库表,其中引用了商品的ID

    现在查询表中的那条记录是属于出库完毕:

    库房出库完毕是指当前库房下的每个商品他对应的数量等于每个商品对于的出库记录之和都相等。

    以下是表结构和初始数据:

    create table TESTPAC.A
    (
      id VARCHAR2(32)
    )
    --
    create table TESTPAC.AA
    (
      id   VARCHAR2(32),
      a_id VARCHAR2(32),
      quty NUMBER
    )
    --
    create table TESTPAC.AAA
    (
      id    VARCHAR2(32),
      aa_id VARCHAR2(32),
      quty  NUMBER
    )
    --
    create table TESTPAC.B
    (
      id   VARCHAR2(32),
      a_id VARCHAR2(32)
    )

    初始化数据:

    A:

    AA:

    AAA:

    以下是EXISTS语句:

    意思是在AA表中不存在数量与子表的数量之和不相等的,即全部都相等:

    1 SELECT *
    2   FROM a
    3  WHERE NOT EXISTS
    4  (SELECT *
    5           FROM aa
    6          WHERE aa.a_id = a.id
    7            AND aa.quty !=
    8                (SELECT nvl(SUM(aaa.quty), 0) FROM aaa WHERE aaa.aa_id = aa.id))

    结果:

    案例二:

    现有用户表USERS和部门表DEPT,在添加用户的过程中,需要填写用户所在的部门,

    现在需要查询存在于当前节点和当前节点下的所有的子部门中的用户。

    表定义如下:

    create table DEPT
    (
      id        VARCHAR2(32),
      dept_name VARCHAR2(32),
      p_id      VARCHAR2(32)
    )
    --
    -- Create table
    create table USERS
    (
      id       VARCHAR2(32),
      username VARCHAR2(32),
      dept_id  VARCHAR2(32)
    )

    DEPT表中的数据:

    1 SELECT lpad(' ', LEVEL * 5) || dept_name
    2   FROM dept t
    3  START WITH t.p_id = 'ROOT'
    4 CONNECT BY PRIOR t.id = t.p_id;

    USERS表中的数据:

    EXISTS语句如下:

    1、查询当前节点和其子节点的数据:

    1 SELECT t.*,
    2        t.rowid
    3   FROM users t
    4  WHERE EXISTS (SELECT NULL
    5           FROM (SELECT id
    6                   FROM dept t
    7                  START WITH t.id = 'AA1'
    8                 CONNECT BY PRIOR t.id = t.p_id) cols
    9          WHERE cols.id = t.dept_id)

    2、根据页面的是否选择子节点的标志位,整合到一个SQL语句中:

     1 SELECT t.*,
     2        t.rowid
     3   FROM users t
     4  WHERE EXISTS
     5  (SELECT NULL
     6           FROM (SELECT id
     7                   FROM dept t
     8                  WHERE t.id =
     9                        decode(:是否包含子节点的数据的标志位,'Y' :传递的id, t.id)
    10                  START WITH t.id = 'AA1'
    11                 CONNECT BY PRIOR t.id = t.p_id) cols
    12          WHERE cols.id = t.dept_id)

    --完!

  • 相关阅读:
    Windows API 之 Windows Service
    揭开Socket编程的面纱 (一)
    开发中“错误: 意外地调用了方法或属性访问。” 和 第一行错误 的IE 两个问题( JQ 进行转义字符 , 分页JS 调用 时参数问题。)
    结合MSDN理解windows service 服务安装的三个类。
    VFW基础知识(一些定义性质的。从CSDN中得到的。)
    初次接触WIN FORM,深入事件、委托、方法 ,深入看不到的C#探索。
    C#: +(特性 ) + Attitude C#(类)前面或者(方法)前面 (中括号)定义
    VFW系列教程经典
    依赖注入
    Windows Service:SC 和 InstallUtil 区别
  • 原文地址:https://www.cnblogs.com/caroline/p/2748782.html
Copyright © 2011-2022 走看看