我现在要批量往数据库中插入数据(xxx证件),这个证件根据证件代码和号码确定唯一,待插入的批量数据里面有些数据,在数据库里面有可能已经存在。
我现在的目的是:批量插入,如果该证件已经存在,就忽略。我想到的做法就是:遍历这个 待插入的批量数据,每一个按照代码和号码去数据库中查询,查到了就跳过,没查询到就新增。但是这个 待插入的批量数据 可能很大,我要遍历他,然后循环的去数据库中按照代码、号码查询,循环的去操作数据库,这样操作数据库压力很大。
所以我的想法是:想根据这个 待插入的批量数据去数据库中查询(批量的,不是循环单条),哪些是已经存在的,在java代码里面将其排除,确保待插入的数据中没有重复的,再批量插入,前后只用执行两次SQL。所以我现在的问题是:如何根据两个条件,去数据库中查询一个list出来?
如果还没有理解我的问题,我再说简单一点:我现在的条件是这样的
[{'code':'3249sdf023','number':'2340dfssdf34'},
{'code':'3249sdf024','number':'2340dfssdf35'},
{'code':'3249sdf025','number':'2340dfssdf36'},
{'code':'3249sdf026','number':'2340dfssdf37'},……]
数据库表里也有code和number这两个字段,要怎么根据这些条件,查询出来一个list
使用in,只能按照一个条件批量查询, where aColumn in (……) and bColumn in (……) 这样没法满足条件。
我一开始也没想到解决办法,百度了半天,终于找到了有用的线索,然后弄出来了。
想批量按照条件查询,首先想到的都是用in,上面也说了,in只能按照一个条件批量查询。想要使用两个条件批量查询。可以拼接条件和字段,SQL如下:
select * from tableA where CONCAT(code,number) in ('3249sdf0232340dfssdf34','3249sdf0242340dfssdf35',……);
在代码中遍历条件,将code和number拼接起来,然后在传给SQL的in条件里面,就完美解决了。不知道这样处理会不会有什么隐患,或者对性能有什么影响,这样应该索引没法使用了。不过相较于循环查询,即便这样索引失效,效率也更高
题目描述我现在要批量往数据库中插入数据(xxx证件),这个证件根据证件代码和号码确定唯一,待插入的批量数据里面有些数据,在数据库里面有可能已经存在。我现在的目的是:批量插入,如果该证件已经存在,就忽略。我想到的做法就是:遍历这个 待插入的批量数据,每一个按照代码和号码去数据库中查询,查到了就跳过,没查询到就新增。但是这个 待插入的批量数据 可能很大,我要遍历他,然后循环的去数据库中按照代码、号码查询,循环的去操作数据库,这样操作数据库压力很大。所以我的想法是:想根据这个 待插入的批量数据去数据库中查询
批量查询数据的sql语句
包括根据数字转成汉字、日期计算
<select id="queryFinaByIds" parameterType="cn.com.git.dgmsfund.api.entity.bo.finance.finaExcelBO" resultType="cn.com.git.dgmsfund.api.entity.bo.finance.finaExcelBO">
select FINANCIAL_INSTITUTION AS financialInstitution
我现在想把S_USER表中的ACCOUNT批量修改成S_PERSON的ACCOUNT
我们可以发现S_USER表中有个跟S_PERSON表关联的字段 那就是PERSON_ID 这也是我们要update的条件
找到这个关系以后我们就不难写sql了
update S_USER set account=p.account from S_PERSON p where p.id=S_USER.person_id;
sqlserver as 语法举例
1、使用表名称别名
有两个表分别是:”Persons”
1.对
查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。
2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:
select id from t where num is null
可以在num上设置默认值0,确保表中num列没有null值,然后这样
查询:
Oracle使用命令行批量执行带参数及用户名是变量的SQL文件
因为数据存在不同的Oracle数据库中,DDL是相同的,处理逻辑也是相同的,但是库名不一样。
因为客户想要所有用户下的指标数据,如果挨个执行sql文件,工作量巨大,所以写了这个逻辑。
使用Oracle命令行的方式,批量执行Oracle不同用户下的sql文件,where条件带变量的操作。
// oracleStup.bat
// 命令行 用户名/密码 @库名 不需要修改
sqlplus C3/AISIN@C3 @
sqlFile.
sql > execute.log
//
sqlFile.
sql
// @@需要处理的
sql文路径
@@D:/20150922/111.
sql
// 执行后会产生一个execute.log文件
// SN一线 你的良师益友
// 如有问题请联系 songyl@snline.cn