• select 1浅析


    今天看到项目代码里有这条语句,不懂select 1 from XXXXXXX里的1是何意,查了一番才知道:

    1、select 1 from mytable;与select anycol(目的表集合中的任意一行) from mytable;与select * from mytable 作用上来说是没有差别的,都是查看是否有记录,一般是作条件用的。select 1 from 中的1是一常量,查到的所有行的值都是它,但从效率上来说,1>anycol>*,因为不用查字典表。

    2、查看记录条数可以用select sum(1) from mytable;等价于select sum(*) from mytable;

    3、实际项目SQL:

    select c_insrnc_cde, c_nme_cn
       from t_prd_ins a
    where a.c_prod_no = '01'
        and not exists
    (select 1
               from (select d.c_insrnc_cde, a.c_nme_cn
                       from t_prd_ins                   a,
                            tb_bas_ply_policy_rdr       c,
                            tb_bas_ply_policy_rdr_list d
                      where a.c_insrnc_cde = d.c_insrnc_cde
                        and d.c_policy_id = c.c_policy_id
                        and d.c_seq_no = c.c_seq_no
                        and a.c_kind_no = '01'
                        and c.c_dpt_cde = '101'   ----机构树中取出机构
                        and c.c_prod_no = '01'
                        and c.t_effc_tm <= TO_DATE('2007-9-5', 'YYYY-MM-DD')
                        and c.t_expd_tm >= TO_DATE('2007-9-5', 'YYYY-MM-DD')
                        and c.c_work_mode = '00501'
                        and c.c_reach_area = '00701'
                        ) t
              where t.c_insrnc_cde = a.c_insrnc_cde);

     二、http://blog.csdn.net/wangyihust/archive/2009/02/05/3863758.aspx

    测试场景:(转自网络文献)
    table表是一个数据表,假设表的行数为10行。

    1:select  1 from table       增加临时列,每行的列值是写在select后的数,这条sql语句中是1

    2:select count(1)  from table   不管count(a)的a值如何变化,得出的值总是table表的行数

    3:select sum(1) from table   计算临时列的和

     在SQL SERVER中用 1 测试了一下,发现结果如下:

    1:测试结果,得出一个行数和table表行数一样的临时列(暂且这么叫,我也不知道该叫什么),每行的列值是1;

    2:得出一个数,该数是table表的行数;

    3:得出一个数,该数是table表的行数;

    然后我又用“2”测试,结果如下:

    1:得出一个行数和table表行数一样的临时列,每行的列值是2;

    2:得出一个数,该数是table表的行数;

    3:得出一个数,该数是table表的行数×2的数

    然后我又用更大的数测试:

    1:得出一个行数和table表行数一样的临时列,每行的列值是我写在select后的数;

    2:还是得出一个数,该数是table表的行数;

    3:得出一个数,该数是table表的行数×写在select后的数

        综上所述:第一种的写法是增加临时列,每行的列值是写在select后的数;第二种是不管count(a)的a值如何变化,得出的值总是table表的行数;第三种是计算临时列的和。
     

    语句if not exists(select 1 from deleted d join inserted i on d.ID=i.ID 
    and d.col1=1 and i.col1=2)

    if not exists 如果不存在 
    (..)这里该是验证更新,更新前的id等于更新后的id,并且更新前col的值是1,更新后的值是2

    语句if not exists(select 1 from deleted d join inserted i on d.ID=i.ID 
    and d.col1=1 and i.col1=2)

    if not exists 如果不存在 
    (..)这里该是验证更新,更新前的id等于更新后的id,并且更新前col的值是1,更新后的值是2

  • 相关阅读:
    Circular dependency issuse on cocoapods version(0.36.0) 全然解决方式(非降版本号)
    Android Studio经常使用配置及使用技巧(二)
    poj 2195 Going Home(最小费最大流)
    OpenFace库(Tadas Baltrusaitis)中基于Haar Cascade Classifiers进行人脸检測的測试代码
    Divisibility by Eight
    hdu 5055(坑)
    微服务(Microservices)
    mysql 运行计划explain具体解释
    URAL 题目1297. Palindrome(后缀数组+RMQ求最长回文子串)
    Windows下将nginx安装为服务运行
  • 原文地址:https://www.cnblogs.com/yzl495/p/4160697.html
Copyright © 2020-2023  润新知