精华内容
下载资源
问答
  • Merge into用法总结

    万次阅读 多人点赞 2018-04-11 09:18:47
    简单的说就是,判断表中有没有符合on()条件中的数据,有了就更新数据,没有就插入数据。  有一个表T,有两个字段a、b,我们想在表T中做Insert/Update,如果条件满足,则更新...if exists(select 1 from T where ...

    简单的说就是,判断表中有没有符合on()条件中的数据,有了就更新数据,没有就插入数据。  

    有一个表T,有两个字段a、b,我们想在表T中做Insert/Update,如果条件满足,则更新T中b的值,否则在T中插入一条记录。在Microsoft的SQL语法中,很简单的一句判断就可以了,SQL Server中的语法如下:  

     

    if exists(select 1 from T where T.a='1001' )
    
    update T set T.b=2 Where T.a='1001'
    
    else
    
    insert into T(a,b) values('1001',2);

    但是很明显这个语法对于SQL只能更改一条语句,并且Oracle不能使用.所以就有了Merge intoOracle 9i引入的功能)语法 

    merge into 目标表 a
    
    using 源表 b
    
    on(a.条件字段1=b.条件字段1 and a.条件字段2=b.条件字段2 ……)  
    
    when matched then update set a.更新字段=b.字段
    
    when  not matched then insert into a(字段1,字段2……)values(值1,值2……)

     

      "在一个同时存在Insert和Update语法的Merge语句中,总共Insert/Update的记录数,就是Using语句中"源表"的记录数"

     源表b可能是一张表结构不同于a的表,有可能是一张构建相同表结构的临时表,也有可能是我们自己组起来的数据.

    对于前两种很好理解。现在主要说一下组件数据。

    对于Oracle有dual这个系统表很好构建,如下

     

    MERGE INTO T T1
    
    USING (SELECT '1001' AS a, 2 AS b FROM dual)  T2
    
    ON ( T1.a=T2.a)
    
    WHEN MATCHED THEN
    
    UPDATE SET T1.b= T2.b
    
    WHEN NOT MATCHED THEN
    
    INSERT (a,b) VALUES(T2.a,T2.b);

     在sql server中,不能使用dual这个系统变量来创建表,所以只能换下思路用union all组装数据或使用临时表,另外using中可以使用的还有table表,view视图,sub_query,子查询

    USING (
    SELECT  '1001'C1,2 C2 
    union all
    SELECT  '1002'C1,3 C2 
    union all...
    ) T2 

    工作中的一个实例

            public Message Saves(List<GoodsQuestionManageModel> models)
            {
                Message msg;
                StringBuilder sbSourceSql = new StringBuilder();
                if (models.Count > 0)//循环组织sql语句
                {
                    int i = 1;
                    foreach (GoodsQuestionManageModel model in models)
                    {
                        sbSourceSql.AppendFormat("select {0} GoodsQuestionManageId,{1} GoodsId,'{2}' OrderNumber,'{3}' Sku,{4} GoodsQuantity,{5} QuestionQuantity,{6} GoodsQuestionTypeId,'{7}' Remarks,{8} CreateUserId,'{9}' CreateTime,{10} LastUpdateUserId,'{11}' LastUpdateTime,{12} IsDelete \r\n",
                            model.GoodsQuestionManageId, model.GoodsId, model.OrderNumber, model.Sku, model.GoodsQuantity, model.QuestionQuantity, model.GoodsQuestionTypeId, model.Remarks, GlobalModel.Instance.UserId, DateTime.Now, GlobalModel.Instance.UserId, DateTime.Now, model.IsDelete);
                        if (models.Count > i++)
                        {
                            sbSourceSql.AppendLine(" union all");
                        }
                    }
    
                    string strSql = string.Format(@"merge into tb_e_GoodsQuestionManage t
                                                        using
                                                        (
                                                       {0}
                                                        )tSource
                                                        on (t.GoodsQuestionManageId=tSource.GoodsQuestionManageId)
                                                        when not matched then 
                                                        insert values
                                                        (
                                                         tSource.GoodsId, tSource.OrderNumber, tSource.Sku, tSource.GoodsQuantity, tSource.QuestionQuantity, tSource.GoodsQuestionTypeId, tSource.Remarks, tSource.CreateUserId, tSource.CreateTime, tSource.LastUpdateUserId, tSource.LastUpdateTime, tSource.IsDelete
                                                        )
                                                        when matched then 
                                                        update set 
                                                        t.GoodsId=tSource.GoodsId,t.OrderNumber=tSource.OrderNumber,t.Sku=tSource.Sku,t.GoodsQuantity=tSource.GoodsQuantity,t.QuestionQuantity=tSource.QuestionQuantity,
                                                        t.GoodsQuestionTypeId=tSource.GoodsQuestionTypeId,t.Remarks=tSource.Remarks,t.LastUpdateUserId=tSource.LastUpdateUserId,t.LastUpdateTime=tSource.LastUpdateTime,t.IsDelete=tSource.IsDelete;", sbSourceSql.ToString());
                    int effectNum = SqlHelper.ExecuteNonQuery(strSql);
                    if (effectNum > 0)
                    {
                        msg = new Message(true, "保存成功!");
                    }
                    else
                    {
                        msg = new Message(false, "保存失败!");
                    }
                }
                else
                {
                    msg = new Message(false, "没有数据,无需保存!");
                }
                return msg;
            }


    Merge 的其他功能

     Merge语句还有一个强大的功能是通过OUTPUT子句,可以将刚刚做过变动的数据进行输出。我们在上面的Merge语句后加入OUTPUT子句

       

       此时Merge操作完成后,将所变动的语句进行输出

       

       

       当然了,上面的Merge关键字后面使用了多个WHEN…THEN语句,而这个语句是可选的.也可以仅仅新增或是仅仅删除

       

     

       

       我们还可以使用TOP关键字限制目标表被操作的行,如图8所示。在图2的语句基础上加上了TOP关键字,我们看到只有两行被更新。

       

       

        但仅仅是MATCHED这种限制条件往往不能满足实际需求,我们可以在图7那个语句的基础上加上AND附加上额外的限制条件

        

     

     

    merge into  效率很高,强烈建议使用,尤其是在一次性提交事务中,可以先建一个临时表,更新完后,清空数据,这样update锁表的几率很小了。

    展开全文
  • 主要介绍了thinkphp3.2框架中where条件查询用法,总结分析了thinkphp3.2中where条件查询中常用的各种查询条件、以及各种复合查询实现方法,需要的朋友可以参考下
  • np.where()用法总结

    万次阅读 多人点赞 2018-03-21 20:52:15
    用法一:可以返回一个n维数组,可广播。# np.where(condition, x, y)# condition, x, y, return are all can be #ndarray x = np.random.randn((4, 4)) np.where(x&gt;0, 2, -2) output:用法二:condition 也...

    用法一:可以返回一个n维数组,可广播。

    # np.where(condition, x, y)
    # condition, x, y, return are all can be #ndarray
    x = np.random.randn((4, 4))
    np.where(x>0, 2, -2)
    
    

    output:


    用法二:condition 也可以是布尔型数组,每个条件都和x,y对应(广播)


    用法三:找到n维数组中特定数值的索引



    展开全文
  • np.where用法

    2021-01-11 09:47:24
    np.where用法总结 知乎大佬讲的更清楚 1.xx = np.array(xx) np.where(condition, x, y) 相当于if xx的每一项是否满足条件 如果满足对应项变为x,否则变为y 2.输出条件中真值的坐标 3.输出数组中等于特定数值的索引 ...

    np.where用法总结
    知乎大佬讲的更清楚
    1.xx = np.array(xx)
    np.where(condition, x, y) 相当于if xx的每一项是否满足条件 如果满足对应项变为x,否则变为y
    2.输出条件中真值的坐标
    在这里插入图片描述
    3.输出数组中等于特定数值的索引

        arr = np.array([[1, 2], [3, 2], [9, 3], [7, 3]])
        print(arr)
        x = np.where(arr==3)
        print(x)
    

    结果:
    [[1 2]
    [3 2]
    [9 3]
    [7 3]]
    (array([1, 2, 3], dtype=int64), array([0, 1, 1], dtype=int64))
    其中:array([1, 2, 3],表示行,array([0, 1, 1],表示列

    展开全文
  • 本文实例讲述了thinkphp3.2框架中where条件查询用法。分享给大家供大家参考,具体如下:thinkphp3.2 where 条件查询在连贯操作中条件where的操作有时候自己很晕,所以整理下,有助于使用查询条件支持的表达式查询,...

    本文实例讲述了thinkphp3.2框架中where条件查询用法。分享给大家供大家参考,具体如下:

    thinkphp3.2 where 条件查询

    在连贯操作中条件where的操作有时候自己很晕,所以整理下,有助于使用

    查询条件

    支持的表达式查询,tp不区分大小写

    含义

    TP运算符

    SQL运算符

    例子

    实际查询条件

    等于

    EQ

    =

    $where['id'] = array('EQ','1')

    id = 2

    不等于

    NEQ

    !=

    $where['id'] = array('NEQ','1')

    id!=2

    大于

    GT

    >

    $where['id'] = array('GT','1')

    id >1

    大于等于

    EGT

    EGT

    $where['id'] = array('EGT','1')

    id>=1

    小于

    <

    <

    $where['id'] = array('lt',1)

    id < 1

    小于等于

    <=

    <=

    $where['id'] = array('elt',1)

    id<=1

    匹配

    like

    like

    where[′id′]=array(′like′,′where[′id′]=array(′like′,′where['id'] = array('like','begin%')

    $where['id'] = array('like','%begin%')

    where id like '%begin'

    where id like 'begin%'

    where id like'%begin%

    在范围内包括俩端值

    between

    0<=id<=10

    $where['id'] = array('between',array('0','10'))

    where id between 0 and 10

    不在范围内

    not between

    0 >id and 1o < id

    $where['id'] = array('not between',array('0','10'))

    where id not between 0 and 10

    在枚举的值中

    in

    in

    $where['id'] = array('in',array('1','2','5'))

    where id in ('1','2','3')

    不在枚举值中

    not in

    not in

    $where['id'] = array('not in',array('1','2',5))

    where id not in ('1','2','5')

    exp

    表达式查询,支持SQL语法

    exp 是表达式的意思,如果你觉得对于一个值限制条件太多的话就可以用这个

    $where['id'] = array('exp','in ( select id from id from tableb)');

    复查的查询语句

    有的时候,我们希望通过一次的查询就能解决问题,这个时候查询条件往往比较复杂,但是却比多次查询库来的高效。

    实在是搞不定的话就直接用$where['_string'] = 'xxxx', 这个代表查询的时候拼接上 xxx 条件,一次性解决问题

    $where['_string'] = 'left join A on A.id = b.id where a.id not in (select id from C)';

    1. 区间查询(一个值得多种情况)

    默认是 and

    $where['id'] =array(array('neq','8'),array('elt','200'),'and'); // 小于等于200 不等于 8

    $where['id'] = array(array('neq','8'),'array('neq','10')','or'); // 不等于8或者不等于10

    2. 复合查询

    相当于封装了新的查询条件在里面

    $where['a'] = 5;

    $where['b'] = 6;

    $where['_logic'] = 'or';

    sql:where a = 5 or b = 6;

    $condition['c'] = '3';

    $condition['d'] = '4'

    $condition['_logic'] = 'or'

    $where['a'] = 9;

    $where['_complex'] = $condition;

    sql: where a=9 and (c = 3 or d = 4)

    根据需求,灵活使用(无限套下去)

    3. sql 查询

    如果有设置了读写分离的话 query 是查询 execute是更新保存

    M()->query('select * from a');

    M()->execute('update a set counts = 3 where id = 1103')

    4. 获取要执行的sql 语句

    有的时候条件太复杂,比如 id in(xxxxx),这个xxx就是通过一系列操作获得的结果,嫌麻烦的就直接 都扔进去,写sql 又长,就直接获取sql语句扔进去

    1.fetchsql

    2.buildsql

    3.select(false)

    M('user')->fetchsql(true)->select();

    M('user')->buildsql();

    M('user')->select(false);

    希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

    展开全文
  • 本文实例总结了CI框架中数据库操作函数$this->db->where()相关用法。分享给大家供大家参考,具体如下: CI 框架数据库操作函数 this->db->where() 的使用 1) $this->db->where(‘MATCH (field) AGAINST (“value”)...
  • 如果要用到group by 一般用到的就是“每这个字” ...where则是在分组前筛选 当同时含有 where 子句、group by 子句 、having 子句及聚集函数时,执行顺序如下: 执行where子句查找符合条件的数据; 使用group by 子...
  • 主要介绍了CI框架中数据库操作函数$this->db->where()相关用法,结合实例分析了or_where()、where_in()、or_where_in()、where_not_in()及or_where_not_in()等函数的使用技巧,需要的朋友可以参考下
  • NSPredicate用法总结

    2015-07-17 17:57:56
    NSPredicate用法总结  分类: IOS开发 objective-c2014-04-09 15:49 2494人阅读 评论(0) 收藏 举报 IOS开发 简述:Cocoa框架中的NSPredicate用于查询,原理和用法都类似于SQL中的where,作用...
  • 一些常用SQL的总结 patIndex ,where ,decimal 等函数的巧用 --1.charIndex 精确查找字符串的位置 declare @charIndex varchar(500) set @charIndex='MicrosoftSQLServerManagement' --返回字符串中'soft'的...
  • SQL用法总结

    千次阅读 2020-08-11 14:19:17
    count(*)与count(column)的区别 count(*)返回的是该表的总行...where子句和having子句的异同 where子句和having子句均用于过滤结果。 where子句过滤的是行,而having过滤的是分组,与group by子句配合使用。 ...
  • np.where() np.argwhere() Find the indices of array elements that are non-zero, grouped by element. 返回非0的数组元组的索引,其中a是要索引数组的条件。 返回数组中所有大于1的数字的索引值。
  • LINQ用法总结

    2019-07-31 11:24:00
    之前一直用sql和拉姆达表达式,一直感觉linq不好用。用熟练了感觉期功能好强大...这里讲讲基本用法。 内联查询: var list2 = (from a in db.Role where a.IsDel==true join b in db.UserRole on a.Id equals...
  • python 用法总结

    2020-02-09 22:36:35
    class AttributeDict(dict): """Example of overloading __getatr__ and __setattr__ This example creates a dictionary where members can be accessed as attributes """ def __ini...
  • getField用法总结

    千次阅读 2017-11-08 15:37:16
    这个是getField方法最基本的用法,用于获取符合条件的某个字段值。 $User = M("User"); // 实例化User对象 // 获取ID为3的用户的昵称  $nickname = $User->where('id=3')->getField('nickname'); ...
  • where()相关用法。分享给大家供大家参考,具体如下:CI 框架数据库操作函数 this->db->where() 的使用1) $this->db->where('MATCH (field) AGAINST ("value")', NULL, FALSE)如果把$this->db->whe...
  • UPDATE 用法总结

    千次阅读 2015-07-06 13:27:44
    ① update 表a set (a.字段1,a. = (select b.字段1 from 表b where a....字段2) where exists(select 1 from 表b where a.字段2=b.字段2)。   ②  MERGE INTO TABLE1 A USING  (SELECT CODE,NAME
  • NSPredicate 用法总结

    2013-08-07 16:50:27
    简述:Cocoa框架中的NSPredicate用于查询,原理和用法都类似于SQL中的where,作用相当于数据库的过滤取。 最常用到的函数 + (NSPredicate *)predicateWithFormat:(NSString *)predicateFormat, ...; 1....
  • SQL常见错误用法总结

    2020-07-09 21:35:52
    1SQL常见错误用法总结 1,LIMIT语句 分页查询是最常用的场景之一,但也通常通常也是最容易出问题的地方。针对下面简单的语句,一般DBA认为的方法是在类型,名称,create_time上下上加组合索引。这样的条件排序都能...
  • [root@localhost~]# whereis tomcat tomcat: [root@localhost~]# whereis svn svn:/usr/bin/svn /usr/local/svn /usr/share/man/man1/svn.1.gz 说明: tomcat 没安装,找不出来, svn 安装找出了很多相关...
  • 达梦HINT用法总结

    2021-02-20 16:30:47
    SELECT /+ HINT1 [HINT2]/ 列名 FROM 表名 WHERE_CLAUSE ; UPDATE 表名 /+ HINT1 [HINT2]/ SET 列名 =变量 WHERE_CLAUSE ; DELETE FROM 表名 /+ HINT1 [HINT2]/ WHERE_CLAUSE ; 需要注意的是:如果 HINT 的语法没有...
  • 动态SQL用法总结

    2021-02-16 23:24:58
    文章目录1、IF2、choose (when, otherwise)3、trim (where,set) 1、IF <select id="queryBlogIF" parameterType="map" resultType="blog"> select * from mybatis.blog where 1=1 <if test="title != ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 448
精华内容 179
关键字:

where用法总结