sql中直接from多表关联和inner join关联有什么区别么

sql中直接from多表关联和inner join关联有什么区别么

6个回答

从结果上看一样。但是从实现上看,多个from是迪卡尔集,再筛选,效率是O(n^2),很差。
join是先做hash,再匹配,效率是O(logN),很好。所以推荐前者。

xu810260277
红笺短 CBO会把from多表关联自动优化成hash连接么?
11 个月之前 回复
caozhy
每个人都有一个梦才不会孤单的说话就有天堂 回复github_38426094: 如果你两者相同,还有个可能是你比较列做了索引,特别是主键。你可以用大数据量测下。
一年多之前 回复
github_38426094
在佐佑 之前我也是尝试了比较执行计划和耗时发现是相同的,虽然官方是推荐第二种但是我在单表千万的数据量没有具体比较出两种区别,有什么办法验证么,
一年多之前 回复
caozhy
每个人都有一个梦才不会孤单的说话就有天堂 回复weixin_42380568: 要看数据量大小了。如果数据量比较小,考虑到调用本身的开销,可能时间差局不明显,给人的假象是都一样。
一年多之前 回复
weixin_42380568
语诺丶Eternity 我刚才通过解释计划执行发现 俩的查询耗时都一样,官方推荐 第二种写法(阅读好,本地化好), 在实际开发中可能会连接好几张表,第二种写法太啰嗦,麻烦,而且hibernate 不支持这样的hql 语句, 我通常是用第一种写法,简洁,快速.
一年多之前 回复
caozhy
每个人都有一个梦才不会孤单的说话就有天堂 所以推荐前者,写错了,所以推荐后者。
一年多之前 回复

个人认为 join关联好使点 虽然from也不差 但是从二者sql语句执行速度上来说 推荐join 如果你不想程序卡死

区别不大,from多表关联是老SQL标准,inner join关联是新SQL标准,仅此而已

普通的多表查询,内部还是笛卡尔积的逐行的搜索机制,如果查询的几张表数据量大的话会降低性能;
第二种是内连接。两种方式得到的结果是一致的。
两者没什么区别,在执行方式和效率上都是一样的,只是书写的方式不同,基本上inner join 是为了区别 left join ,right join等的一个写法,而另外那种不是join的写法,只能等同于inner join。

weixin_43726822
一叶知秋_dba 这个是误导新手啊 执行效率差很多 inner join快
9 个月之前 回复

inner join(等值连接) 只返回两个表中联结字段相等的行的记录
直接from多表关联,是指隐式内连接吧? 不加where条件会出现笛卡尔积,这种结果没有实际意义
直接from多表关联 加了where条件以后,只有两个表相匹配的行才能在结果集中出现

个人认为在执行时的区别不大,inner join能比较清楚告诉阅读者是哪些表进行了关联,以及关联的字段是什么。where就要读者自己去看了。对于SQL解释器就差别不大了。但是SQL规格推荐是用join的。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
sql语句问题,如何在多表关联下,在重复数据里面,根据某一个唯一的值,sum另一个值的和。
``` select distinct cl.description 数据批次, s.rolegroupdescription 拨打小组, count(distinct oj.customer_guid)分配数量, sum(case when t1.calltype=2 and t1.stringfield1='CTI' then 1 else 0 end) 拨打次数, count(distinct case when t4.calltype=2 then t1.customer_guid end) 接通客户数, sum(case when t4.calltype=2then 1 else 0 end) 接通个数, sum(case when t1.calltype=2 and t1.stringfield1='CTI' and floor((t4.endtime- t4.starttime)*24*60)>1 then 1 else 0 end) 一分钟以上个数, count(distinct co.appl_no) 成交件数, sum(distinct year_premium) 成交业绩 from customer c left join (select * from gd_ods_core where cntr_stat in ('K','L','M')) co on co.mobile=c.mobile inner join objective oj on oj.customer_guid=c.customer_guid left join event t1 on c.customer_guid=t1.customer_guid inner join custlists cl on c.stringfield1= cl.custlist_xxx inner join gd_temp_staff s on oj.tlallot =s.staff_id inner join (Select customer_guid,max(createddate) as maxcreateddate from objective where tlallot is not null group by customer_guid)L on oj.customer_guid=L.customer_guid and oj.createddate=L.maxcreateddate left join record t4 on t4.customer_guid = t1.customer_guid and t4.event_guid = t1.event_guid and t4.staff_id = t1.handleby_id where cl.CustList_xxx='CustList_jtkh20170623hh32' group by cl.description,s.rolegroupdescription order by cl.description ``` 现在问题是最后取成交金额sum(year_premium) 这里,因为数据重复,所以直接sum会大很多,但如果直接sum(distinct year_premium),会导致不同成交件,但相同交易金额的数給剔除,那就造成金额少了。 gd_ods_core成单表本身是唯一,但由于统计数据的要求,关联了电话拨打表“event”数据分配表“objective”和电话录音表“record”,客户电话拨打得越多,重复数量就越多,如果直接select 成单表gd_ods_core的话,要统计分配数量、拨打次数、接通次数就不准。 请帮忙提供如何根据appl_no(唯一单号)来sum year_premium(业绩金额) 或提供完全不同逻辑 ![sum(distinct year_premium的情况)](https://img-ask.csdn.net/upload/201711/09/1510211694_467545.jpg) ![sum(year_premium的情况](https://img-ask.csdn.net/upload/201711/09/1510211721_445408.jpg) 两个图都没办法准确统计业绩金额。
SQL问题关联查询去掉重复
A 表 cmo1 订单编号 cmo2 用户ID cmo2 订单金额 B表 bom1 会员卡ID bom2 用户ID bom3 会员卡金额 select * from A as a inner join B as b on a.com2=b.bom2 现在问题是一个用户会有两张或者多张会员卡 所以关联查询的时候会发现出现两条重复的记录 怎么解决?
数据库 关联查询 给予参数 两张表
有表一 ID name 表二 ID address 1 123 1 2333 2 456 2 111233 3 3445 4 5667778 两张表通过 内连接 select * from 表1 inner join 表2 course on 表1.ID= 表2.ID 显示 共有的 ID name address 1 123 2333 2 456 111233 我现在我想通过表2的ID 1 查询 表1 的 name 值 sql 语句应该怎么写? 新手 求教啊!!!
如何在三个表进行关联查找出想要的数据?
为了方便说明,我以下将简单描述表名和列名。 现在有三个表,基础数据表A,基础数据详细内容表B,进阶数据表C。,三个表里面都需要用到两个列。 A表里:信息编码code(和B表的内容关联),标注编码ident(和C表的内容关联)。 B表里:信息编码code,信息详情content。 C表里:标注编码ident,信息详情content。 现在我希望通过C表的数据,去回溯找到对应的B表数据。查找到的的结果类似如下(一个基础数据可能对应多个进阶数据): 基础数据B1,进阶数据C1。 基础数据B1,进阶数据C2。 基础数据B1,进阶数据C3。 基础数据B2,进阶数据C4。 基础数据B3,进阶数据C5。 基础数据B4,进阶数据C6。 基础数据B4,进阶数据C7。 我自己写的sql有三个版本,如下: 版本一:------------------------------------------------------------ SELECT 临时表k.content,表C.CONTENT FROM 表C LEFT JOIN ( SELECT 表A.IDENT ident,表B.CONTENT content FROM 表B INNER JOIN 表A ON 表A.CODE = 表B.CODE ) 临时表k ON 临时表k.ident = 表C.IDENT 版本二:------------------------------------------------------------ WITH 临时表k AS ( SELECT 表C.CONTENT content, 表C.IDENT IDENT FROM 表C ) SELECT 表B.CONTENT,临时表k.content FROM 临时表k, 表B WHERE 表B.CODE IN ( SELECT code FROM 表A WHERE 表A.IDENT IN( SELECT IDENT FROM 临时表k ) ) 版本三:----------------------------------------------------------- select 表B.content,临时表k.content FROM ( SELECT 表A.code code,临时表L.CONTENT content FROM ( SELECT 表C.IDENT IDENT,表C.CONTENT CONTENT FROM 表C ) 临时表L LEFT JOIN 表A ON 表A.IDENT = 临时表L.IDENT ) 临时表k LEFT JOIN 表B ON 表B.CODE = 临时表k.code 以上三个版本在通过表C对应获取表B数据的时候,都能正确获取,但是当一起对应输出的时候,数据就不对了。 例如本来表C的数据在300个,正确获取到表B的数据应该是200多个,然后汇总对比在一起应该是300行输出,但是汇总输出是4万多个,我个人觉得应该是笛卡尔积的问题,但是不知道错误出现在哪儿,求指教!
两张表关联查询 请各位大佬帮忙看一下怎么写sql
* 1. 假设有AB两张表 A表有a b,两个字段,B表有a c两个字段,查出a不同,b=1,c=1的数据 。各位大佬帮看下怎么写sql from dw_pdata_east.a_rp_east_dghqckfhzmxjl hq inner join dw_pdata_east.a_rp_east_grhqckfhz A on hq.hqckzh=A.hqckzh and A.bzjzhbz = '是' where hq.hxjyrq = IN_CJRQ and hq.jdbz='贷' and hq.dfhm not in ( select zhmc from dw_pdata_east.a_rp_east_dghqckfhz B inner join dw_pdata_east.a_rp_east_dghqckfhzmxjl C on B.zhmc =C.hqckzh ); 是写存储过程。。。。那种sql写了不行,上面是我写的,我把我写的条件贴出来,大佬们看一下 后面我改成这样了 from dw_pdata_east.a_rp_east_dgdqckfhzmxjl dq inner join dw_pdata_east.a_rp_east_dgdqckfhzmx A on dq.dqckzh =A.dqckzh where dq.hxjyrq = IN_CJRQ and dq.jdbz='贷' and dq.mxkmmc='保证金' and dq.dfhm <> A.zhmc ;
SQL语句问题的请教,关于四表关联查询?
students(学生ID,班级ID,学校ID,卡号ID) classes(班级ID,年级ID,班级名) schools(学校ID,学校姓名) grades(年级ID,年级名) 需求:找到卡号=10的学生的姓名,年级,班级,学校 select * from `students` inner join `classes` on `students`.`classes_id`=`classes`.`classes_id` inner join `grades` on `classes`.`grades_id`=`grades`.`grades_id` where length(`students_card_id`)=10 先查询三表的 这个语句都没有执行成功 ,不知道是不是![图片说明](https://img-ask.csdn.net/upload/201711/16/1510803127_554191.png)
通过二表关联的查询到数据如何删除(oracle)
select * from ETL_KJ inner join ETL_DEAL_LOG on ETL_KJ.KJID=ETL_DEAL_LOG.SOURCEID 这是我查询的语句 ----------------------------------- delete ETL_KJ,ETL_DEAL_LOG from ETL_KJ left join ETL_DEAL_LOG on ETL_KJ.KJID =ETL_DEAL_LOG.SOURCEID where ETL_KJ.KJID=ETL_DEAL_LOG.SOURCEID 这是我写的关联删除语句,但是报错 望高手解答
SQL里递归结果如何和其他表进行关联
我这里有一个退料,主要是退半成品,和一个领料,主要是领半成品下面的物料的一个SQL语句:SELECT tf1.REM,tf1.IJ_NO,tf1.PRD_NO,tf1.ID_NO,tf1.qty ,tf2.FL_NO,tf2.PRD_NO,tf2. qty FROM TF_IJ tf1 LEFT JOIN TF_FL tf2 ON tf2.REM=tf1.REM AND tf2.ITM=tf1.ITM WHERE tf1.REM!=''AND tf1.PRD_NO LIKE '1010%' AND tf1.REM='MO121001706'AND tf1.PRD_NO= '1010300125' 结果如下: REM IJ_NO PRD_NO ID_NO qty FL_NO PRD_NO qty MO121001706 WI130100106 1010300125 1010300125->A0 40 M7130600060 1030100163 300 然后我用递归查询出来了这个半成品下面的最终物料和单位用量(都递归过),语句如下: WITH CTE(bom_no,prd_no,id_no,qty ) AS (select bom_no,prd_no,id_no,qty from tf_bom WHERE BOM_NO='1010300125->A0' UNION ALL SELECT A.BOM_NO,A.PRD_NO,A.id_no,CAST((B.qty*A.QTY) as NUMERIC(28,8)) AS qty FROM CTE B INNER JOIN tf_bom A on A.bom_NO=B.id_no ) SELECT bom_no,prd_no,id_no,qty FROM CTE where not exists( select 1 from tf_bom where bom_NO=CTE.id_no) 递归的结果是: bom_no prd_no id_no qty POL111->A0 1020300223 1 POL111->A0 1020300132 1 1010100060-> 1020500024 1 然后我想要的结果是根据查出退料的半成品及退料数,根据递归结果,得出应该领的最终物料的物料号及数量,和实际领的物料号及数量进行比较,结果如下: IJ_NO PRD_NO ID_NO qty 1010300125->A0的下层物料 1010300125->A0的最终物料 根据递归的标准用量乘以退料的半成品数 FL_NO PRD_NO qty WI130100106 1010300125 1010300125->A0 40 POL111->A0 1020300223 1x40 M7130600060 1030100163 300 WI130100106 1010300125 1010300125->A0 40 POL111->A0 1020300132 1x40 M7130600060 1030100163 300 WI130100106 1010300125 1010300125->A0 40 1010100060-> 1020500024 1x40 M7130600060 1030100163 300
sql新手,请问如何将一个查询结果的某元素与另一个的某元素关联
![图片说明](https://img-ask.csdn.net/upload/201910/14/1571059932_786237.png) student是学生表,sc是学生(sid)在课程(cid)上的得分表 题目是查询平均成绩大于65的学生的sid,名字和平均分 我像这样写了。 ``` select * from (select sid,avg(score) as avg_score from sc group by sid having avg_score>65) t ``` 里面可以查询达标学生的姓名,sid ``` select * from (select sid,avg(score) as avg_score from sc group by sid having avg_score>65) t ``` 达标学生的平均分 但是不知道怎么将两表的sid innner join 起来 像下面这样会语法错误 ``` select * from (select sid,sname from student where sid in (select sid from sc group by sid having avg(score)>65)) t inner join sid on (select sid,avg(score) as avg_score from sc group by sid having avg_score>65) t t.sid ```
需要查询出所有字段,让userId显示,但是只显示一个,求大佬解答一下
![图片说明](https://img-ask.csdn.net/upload/201812/13/1544673543_740428.jpg) 也就是和图片上一样的效果。要查询出数据,然后还要分页。 ``` create table UserInfo ( userId VARCHAR(20) primary key NOT NULL, --用户身份证号 userEmail VARCHAR(50) NOT NULL, --用户邮箱 用于登录 userPwd VARCHAR(20) NOT NULL, --用户密码 registerTime DATETIME NOT NULL, --注册时间 注册时默认当前系统时间 ) go --用户详细信息表 create table UserDetailInfo ( userId VARCHAR(20) NOT NULL, --用户身份证号 外键,关联用户信息表中主键userId userName VARCHAR(50) NOT NULL, --姓名 userPhone VARCHAR(20) NOT NULL, --联系电话 userAddress VARCHAR(100) NOT NULL, --联系地址 ) ``` ``` --多表查询分页 select top 3* from (select userEmail,userPwd,registerTime,userName,userPhone,userAddress,ROW_NUMBER() OVER(order by userEmail) as RowNo from UserInfo a inner join UserDetailInfo b on a.userId=b.userId)as t1 where RowNo not in(select top 0 RowNo from (select userEmail,userPwd,registerTime,userName,userPhone,userAddress,ROW_NUMBER() OVER(order by userEmail) as RowNo from UserInfo a inner join UserDetailInfo b on a.userId=b.userId)as t2 order by RowNo asc) ``` 我用这条语句只能显示其余6个字段,userId查询不出来。 ``` select top 3* from (select UserInfo.userId,userEmail,userPwd,registerTime,userName,userPhone,userAddress,ROW_NUMBER() OVER(order by userEmail) as RowNo from UserInfo a inner join UserDetailInfo b on a.userId=b.userId)as t1 where RowNo not in(select top 0 RowNo from (select userEmail,userPwd,registerTime,userName,userPhone,userAddress,ROW_NUMBER() OVER(order by userEmail) as RowNo from UserInfo a inner join UserDetailInfo b on a.userId=b.userId)as t2 order by RowNo asc) ``` 如果在中间加入userId的话,就会报“无法绑定由多个部分组成的标识符UserInfo.userId”
三张没有外键关联的表做联合查询,应该如何写
有三张表 第一张是人员person表 字段: ID SEX 第二张表是部门表dept 字段: ID districtmark 其中districtmark有两个值,1和2 1表示部门属于市级,2表示部门属于区级 第三张表是部门人员表personDept 字段有: ID personid deptid 每个人员都属于一个部门,三张表都没有外键,第一张人员表和第二张部门表通过第三张的部门人员表的personid和deptid关联起来 我想查出所有属于[b]区级[/b]部门的[b]人员[/b]出来,而且还能加上多条件的模糊查询语句,就是还能用where 1=1; 下面是sql语句,我在数据库里面可以执行 select distinct * from persona inner join personDept b on a.id = b.personid inner join dept c on b.deptid = c.id where c.districtmark = 2; 这是我写的hql语句,但有错 //模糊查询 string queryCondition=”; if (id != null) { queryCondition += " and (a.id like '%"+id+"%')"; } if (sex != null) { queryCondition += " and a.sex='" + sex + "'"; } //hql语句 String query = "select distinct a from TOrgPerson as a, TOrgDeptpersons as b, TOrgDept as c where a.id = b.personid and b.deptid=c.id and c.districtmark = 2 " + " where 1=1 " + queryCondition; //执行query查询语句 上面的hql应该怎么改呢?
MySQL两个表关联查询慢
有A,B两个表, A表是所有客户端的日志,数量在两百万 B表是客户端明细,数量在两万 现在需要筛选出符合某些条件的客户端的日志,SQL如下: ``` SELECT A.* FROM `VIEW_DATA.basic_LOG.20160523` A INNER JOIN (SELECT AGT_ID FROM VIEW_AGENT where AGT_GRP_ID in (999)) B ON A.`BAS_AGT_ID` = B.AGT_ID ORDER BY `BAS_TIME` DESC, `ID` DESC LIMIT 7; ``` 1 SIMPLE basic_log index IX_BASIC_LOG_BAS_AGT_ID IX_BASIC_LOG_BAS_TIME_ID 10 7 100 Using where 1 SIMPLE a eq_ref PRIMARY PRIMARY 4 ocular3_data.20160523.basic_log.BAS_AGT_ID 1 100 1 SIMPLE b eq_ref PRIMARY PRIMARY 4 ocular3.a.AGT_GRP_ID 1 100 Using where; Using index
关于mysql优化连表查询的问题
mysql中查询两张表中的数据,一张表的数据量大,一张数据量小,有一个id关联,但是这个id在两张表都不是主键,怎么 查才能速度快呢?sql大概在下面,数据a表10w条,b表几十条 select * from a a ,b b where a.c_id = b.c_id ORDER BY a.cid limit 1,20 大概要0.8秒,如果去掉排序只要3ms,试过用inner join ,但是有条件的情况下也很慢
谁能解答下为什么这两个SQL,只是关联顺序不一样,性能差别那么大
第一个 : SELECT a.request_detail_id, a.vendorid, a.request_id, a.s1, a.s2, a.s3, a.s4, a.profit, a.ratio, a.requestqty, a.stockqty, a.sponroadqty, a.reqonroadqty, a.reqpurqty, a.piqty, a.ispurchase, a.remark, a.skuid, a.v_req_detail_id, a.is_rollback_collection, a.v_req_detail_id_sort, a.reqdeliverydate, b.sku, b.description, bi.purspec, bi.purdesc, a.purpkgid, a.skulabel, a.skulabel skulable, a.purpkg, a.stopkg, a.purnote1, a.purnote2, -- IFNULL(sup.minqty ,- 1) AS minqty, o. STATUS, o.shipping_date, SUM( CASE WHEN o.shipping_date >= '2015-06-15' THEN d.quantity ELSE 0 END ) AS quantityT, SUM( CASE WHEN o.shipping_date >= '2015-05-16' AND o.shipping_date < '2015-06-15' THEN d.quantity ELSE 0 END ) AS quantityS, SUM( CASE WHEN o.shipping_date >= '2015-04-16' AND o.shipping_date < '2015-05-16' THEN d.quantity ELSE 0 END ) AS quantityN FROM rs_request_detail a LEFT JOIN rs_request rq ON rq.request_id = a.request_id INNER JOIN bs_item_locale b ON a.skuid = b.skuid AND b.lang_id = 1 INNER JOIN bs_item bi ON a.skuid = bi.skuid LEFT JOIN ( SELECT psi.skuid, IFNULL( MIN( IF ( psi.minqty = 0, 999999999, psi.minqty ) ) ,- 1 ) AS minqty FROM pr_supplier_item psi LEFT JOIN pr_supplier ps ON ps.supplierid = psi.supplierid AND ps.inactive = 1 WHERE psi.itemstatus = 4 GROUP BY skuid ) AS sup ON sup.skuid = a.skuid LEFT JOIN so_order_detail d ON d.skuid = b.skuid LEFT JOIN so_order o ON o.order_id = d.order_id AND o. STATUS = 4 and o.shipping_date < '2015-05-16' WHERE (1 = 1) AND a.request_id = 15259 AND b.lang_id = 1 GROUP BY a.request_detail_id ORDER BY a.v_req_detail_id_sort DESC, a.v_req_detail_id ASC, a.reqpurqty DESC LIMIT 0,100 ![图片说明](https://img-ask.csdn.net/upload/201507/15/1436963781_103966.png) SELECT a.request_detail_id, a.vendorid, a.request_id, a.s1, a.s2, a.s3, a.s4, a.profit, a.ratio, a.requestqty, a.stockqty, a.sponroadqty, a.reqonroadqty, a.reqpurqty, a.piqty, a.ispurchase, a.remark, a.skuid, a.v_req_detail_id, a.is_rollback_collection, a.v_req_detail_id_sort, a.reqdeliverydate, b.sku, b.description, bi.purspec, bi.purdesc, a.purpkgid, a.skulabel, a.skulabel skulable, a.purpkg, a.stopkg, a.purnote1, a.purnote2, IFNULL(sup.minqty ,- 1) AS minqty, o. STATUS, o.shipping_date, SUM( CASE WHEN o.shipping_date >= '2015-06-15' THEN d.quantity ELSE 0 END ) AS quantityT, SUM( CASE WHEN o.shipping_date >= '2015-05-16' AND o.shipping_date < '2015-06-15' THEN d.quantity ELSE 0 END ) AS quantityS, SUM( CASE WHEN o.shipping_date >= '2015-04-16' AND o.shipping_date < '2015-05-16' THEN d.quantity ELSE 0 END ) AS quantityN FROM rs_request_detail a LEFT JOIN rs_request rq ON rq.request_id = a.request_id INNER JOIN bs_item_locale b ON a.skuid = b.skuid AND b.lang_id = 1 INNER JOIN bs_item bi ON a.skuid = bi.skuid LEFT JOIN so_order_detail d ON d.skuid = b.skuid LEFT JOIN so_order o ON o.order_id = d.order_id AND o. STATUS = 4 and o.shipping_date < '2015-05-16' LEFT JOIN ( SELECT psi.skuid, IFNULL( MIN( IF ( psi.minqty = 0, 999999999, psi.minqty ) ) ,- 1 ) AS minqty FROM pr_supplier_item psi LEFT JOIN pr_supplier ps ON ps.supplierid = psi.supplierid AND ps.inactive = 1 WHERE psi.itemstatus = 4 GROUP BY skuid ) AS sup ON sup.skuid = a.skuid WHERE (1 = 1) AND a.request_id = 15259 AND b.lang_id = 1 GROUP BY a.request_detail_id ORDER BY a.v_req_detail_id_sort DESC, a.v_req_detail_id ASC, a.reqpurqty DESC LIMIT 0,100 ![图片说明](https://img-ask.csdn.net/upload/201507/15/1436963780_757785.png)
mysql 3个表关联时查询时的优化
一共三张表tips,tippings,comments。tippings 是中间表。tips 和 comments 是多对多的关系。tips只有两列:id,name tippings 的create语句: [code="sql"] CREATE TABLE `tippings` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `tip_id` INT(11) NULL DEFAULT NULL, `tippable_id` INT(11) NULL DEFAULT NULL, `tipper_id` INT(11) NULL DEFAULT NULL, `tipper_type` VARCHAR(255) NULL DEFAULT NULL, `tippable_type` ENUM('Post','Comment') NULL DEFAULT NULL, `context` ENUM('tips') NULL DEFAULT NULL, `created_at` DATETIME NULL DEFAULT NULL, PRIMARY KEY (`id`), INDEX `index_tippings_on_tip_id` (`tip_id`), INDEX `index_tippings_on_tippable_id_and_tippable_type_and_context` (`tippable_id`, `tippable_type`, `context`), INDEX `index_cttt` (`context`, `tippable_type`, `tippable_id`, `tip_id`) ) [/code] 查询语句为 [code="sql"] SELECT tips.*, COUNT(*) AS count FROM `tips` LEFT OUTER JOIN tippings ON tips.id = tippings.tip_id INNER JOIN comments ON comments.id = tippings.tippable_id WHERE (tippings.tippable_type = 'Comment') GROUP BY tips.id, tips.name HAVING COUNT(*) > 0 ORDER BY count desc LIMIT 75; [/code] tippings 目前800多万条记录。 查询速度太慢 各位帮忙看看能不能更好的优化下
关于用一张表的结果更新另一张表字段的问题
大牛们,我现在有一张表A,A里面有两个字段,是分别存取开始时间和结束时间的, 我现在想把A的开始时间和结束时间计算出的时间差得到的结果更新到表B的一个字段当中, 两个表通过表中的用户名字进行关联,请问这个语句该怎么实现呢? 我在网上查了好久,自己写的如下 update hrm_train_tutor A inner JOIN ( SELECT TIMESTAMPDIFF( minute, u.train_starttime,u.train_endtime) as result from (hrm_train_application u) )as B on A.user_name = B.train_tutor SET A.train_time = B.result 但是并不能运行。。。
hibernate多对多关联查询配置
学生、课程、成绩三者 public class Student extends BaseModel { private static final long serialVersionUID = 1L; @Id @GenericGenerator(name = "idGenerator", strategy = "uuid") @GeneratedValue(generator = "idGenerator") @Column(name = "stuId", nullable = false, length = 32) private String stuId; @Column(length = 18) private String name; @Column(length = 4, columnDefinition = "char(4) default '男'") private String sex; @Column(length = 2, columnDefinition = "int(2) default 0") private Integer age; /** * 此处注意,配置级联操作,否则插入时不对class表进行操作 一般对many-to-one,many-to-many不设置级联 默认立即加载 */ @ManyToOne @JoinColumn(name = "classId", insertable = true) private StudentClass studentClass; /** * FetchType.EAGER立刻加载 根据score表的stuId和courseId确定学生课程 */ @ManyToMany(fetch = FetchType.LAZY) @JoinTable(name = "score", joinColumns = {@JoinColumn(name = "stuId", referencedColumnName = "stuId")}, inverseJoinColumns = @JoinColumn(name = "courseId", referencedColumnName = "courseId")) private Set<Course> courses; /** * 临时存储地址信息,不是数据库表字段 */ @Transient private String address; private StudentInfo studentInfo; @Column(nullable = false) private Date createDate; } public class Course extends BaseModel { private static final long serialVersionUID = 8392508645032834965L; @Id @GenericGenerator(name = "idGenerator", strategy = "uuid") @GeneratedValue(generator = "idGenerator") @Column(name = "courseId", nullable = false, length = 32) private String courseId; @Column(length = 40, nullable = false) private String name; /** * 课时,单位小时 */ @Column(nullable = false) private Integer hour; /** * 课程编号 */ @Column(nullable = false, length = 20) private String courseNum; @Column private Date createDate; @OneToOne(mappedBy = "student") @JoinColumn(name="scoreId") private Score score; } public class Score extends BaseModel { private static final long serialVersionUID = 7050826786056804341L; @Id @GenericGenerator(name = "idGenerator", strategy = "uuid") @GeneratedValue(generator = "idGenerator") @Column(name = "scoreId", nullable = false, length = 32) private String scoreId; @ManyToOne @JoinColumn(name = "courseId", nullable = false) private Course course; @ManyToOne @JoinColumn(name = "stuId", nullable = false) private Student student; @Column private Integer score; @Column(name = "grade", length = 4) private String grade; } 我遍历学生课程及成绩时,获取的成绩为空 for (Student student : list) { System.out.println(student.getName()); Set<Course> courses=student.getCourses(); if (courses!=null&&courses.size()>0) { for (Course course : courses) { System.out.println(course.getName()+":"+course.getScore().getGrade()); } } } Hibernate打印的sql: select courses0_.stuId as stuId10_3_, courses0_.courseId as courseId3_, course1_.courseId as courseId3_0_, course1_.courseNum as courseNum3_0_, course1_.createDate as createDate3_0_, course1_.hour as hour3_0_, course1_.name as name3_0_, score2_.scoreId as scoreId9_1_, score2_.courseId as courseId9_1_, score2_.grade as grade9_1_, score2_.score as score9_1_, score2_.stuId as stuId9_1_, course3_.courseId as courseId3_2_, course3_.courseNum as courseNum3_2_, course3_.createDate as createDate3_2_, course3_.hour as hour3_2_, course3_.name as name3_2_ from score courses0_ inner join studentManager.course course1_ on courses0_.courseId=course1_.courseId left outer join studentManager.score score2_ on course1_.courseId=score2_.stuId left outer join studentManager.course course3_ on score2_.courseId=course3_.courseId where courses0_.stuId=? hibernate用的不精,我想实现从score表中查询指定学生的课程并关联其成绩 烦请高手看看实体配置的有什么问题,应该怎么改
mysql数据库字段拼接、分组等问题
首先,这是表A,名字为building_device_ms,如下图: ![图片说明](https://img-ask.csdn.net/upload/201611/19/1479559863_195107.png), 然后表B,名字为ms_uploaddata,下图所示:![图片说明](https://img-ask.csdn.net/upload/201611/19/1479559881_378934.png) 两张表之间,靠字段uid关联。现在我想用sql语句实现如下效果:根据表B的uid,如2290614309,找到对应的表A里的deviceid值,即3. 然后把表A中所有deviceid=3的uid的值拼接起来形成字段uids,这里即【2290614309、2290614311】,最后想要的结果如下:![结果图](https://img-ask.csdn.net/upload/201611/19/1479558963_665663.png),问题在于:要保证表B里有几条记录,最后sql语句出来的结果就有几条,我的sql语句: (1) ``` SELECT tmp.deviceid, tmp.uid, REPLACE(group_concat(a.uid),',','、') as uids FROM building_device_ms a INNER JOIN (SELECT b.deviceid ,c.uid FROM building_device_ms b INNER JOIN ms_uploaddata c on b.uid = c.uid) tmp on tmp.deviceid = a.deviceid GROUP BY a.deviceid ``` 分组时,由于deviceid都为3,给全部拼接了 ![图片说明](https://img-ask.csdn.net/upload/201611/19/1479559059_124131.png) (2) ``` SELECT DISTINCT tmp.deviceid, tmp.uid, REPLACE(group_concat(a.uid),',','、') as uids FROM building_device_ms a INNER JOIN (SELECT DISTINCT b.deviceid ,c.uid FROM building_device_ms b INNER JOIN ms_uploaddata c on b.uid = c.uid) tmp on tmp.deviceid = a.deviceid GROUP BY a.deviceid ``` ![图片说明](https://img-ask.csdn.net/upload/201611/19/1479559277_158720.png) 去重就保证不了记录数与表B一致。 综合起来——去重、分组保证不了记录数与表B一致,且分组会由于deviceid值相同,全部拼接了起来;不分组,uid拼接不起来,是不是我思路错了?希望有朋友耐心解决!~~万分感谢!
关于JPA自定义结果集的问题
<p>数据库中存在两张表 T_NODES 和 T_USER,两张表通过NODEID列进行关联,比如执行一条SQL查询,语句如下:</p> <pre name="code" class="sql">select u.username, n.nodename from t_user u inner join t_nodes n on u.nodeid = n.nodeid</pre> <p> (其中username为T_USER中的列,nodename为T_NODES中的列)</p> <p> </p> <p>得到的结果集并非两个Entity对象,我新建了一个POJO,里面的Field为返回的这两列,请问如何映射该结果集,才能在执行createNativeQuery()方法时,自动将结果集转换成该POJO?望高人指教,谢谢!!</p>
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载 点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。 ...
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
Elastic:菜鸟上手指南
您们好,我是Elastic的刘晓国。如果大家想开始学习Elastic的话,那么这里将是你理想的学习园地。在我的博客几乎涵盖了你想学习的许多方面。在这里,我来讲述一下作为一个菜鸟该如何阅读我的这些博客文章。 我们可以按照如下的步骤来学习: 1)Elasticsearch简介:对Elasticsearch做了一个简单的介绍 2)Elasticsearch中的一些重要概念:cluster, n...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看...
Java知识体系最强总结(2020版)
更新于2019-12-15 10:38:00 本人从事Java开发已多年,平时有记录问题解决方案和总结知识点的习惯,整理了一些有关Java的知识体系,这不是最终版,会不定期的更新。也算是记录自己在从事编程工作的成长足迹,通过博客可以促进博主与阅读者的共同进步,结交更多志同道合的朋友。特此分享给大家,本人见识有限,写的博客难免有错误或者疏忽的地方,还望各位大佬指点,在此表示感激不尽。 文章目录...
计算机专业的书普遍都这么贵,你们都是怎么获取资源的?
介绍几个可以下载编程电子书籍的网站。 1.Github Github上编程书资源很多,你可以根据类型和语言去搜索。推荐几个热门的: free-programming-books-zh_CN:58K 星的GitHub,编程语言、WEB、函数、大数据、操作系统、在线课程、数据库相关书籍应有尽有,共有几百本。 Go语言高级编程:涵盖CGO,Go汇编语言,RPC实现,Protobuf插件实现,Web框架实...
卸载 x 雷某度!GitHub 标星 1.5w+,从此我只用这款全能高速下载工具!
作者 | Rocky0429 来源 | Python空间 大家好,我是 Rocky0429,一个喜欢在网上收集各种资源的蒟蒻… 网上资源眼花缭乱,下载的方式也同样千奇百怪,比如 BT 下载,磁力链接,网盘资源等等等等,下个资源可真不容易,不一样的方式要用不同的下载软件,因此某比较有名的 x 雷和某度网盘成了我经常使用的工具。 作为一个没有钱的穷鬼,某度网盘几十 kb 的下载速度让我...
复习一周,京东+百度一面,不小心都拿了Offer
京东和百度一面都问了啥,面试官百般刁难,可惜我全会。
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
一文带你看清 HTTP 所有概念
上一篇文章我们大致讲解了一下 HTTP 的基本特征和使用,大家反响很不错,那么本篇文章我们就来深究一下 HTTP 的特性。我们接着上篇文章没有说完的 HTTP 标头继续来介绍(此篇文章会介绍所有标头的概念,但没有深入底层) HTTP 标头 先来回顾一下 HTTP1.1 标头都有哪几种 HTTP 1.1 的标头主要分为四种,通用标头、实体标头、请求标头、响应标头,现在我们来对这几种标头进行介绍 通用...
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东...
【综合篇】浏览器的工作原理:浏览器幕后揭秘
web(给达达前端加星标,提升前端技能)了解浏览器是如何工作的,能够让你站在更高的角度去理解前端浏览器的发展历程的三大路线,第一是应用程序web化,第二是web应用移动化,第三是web操...
破14亿,Python分析我国存在哪些人口危机!
一、背景 二、爬取数据 三、数据分析 1、总人口 2、男女人口比例 3、人口城镇化 4、人口增长率 5、人口老化(抚养比) 6、各省人口 7、世界人口 四、遇到的问题 遇到的问题 1、数据分页,需要获取从1949-2018年数据,观察到有近20年参数:LAST20,由此推测获取近70年的参数可设置为:LAST70 2、2019年数据没有放上去,可以手动添加上去 3、将数据进行 行列转换 4、列名...
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!...
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。 再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。 下文是原回答,希望能对你能有所启发。 如果我说,这个世界上人真的分三六九等,...
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合...
死磕Lambda表达式(二):Lambda的使用
在哪使用Lambda表达式?怎么样正确的使用Lambda表达式?
史上最牛逼的 Eclipse 快捷键,提高开发效率!
如果你在使用IDEA,请参考博主另外的一篇idea快捷键的博客。
在三线城市工作爽吗?
我是一名程序员,从正值青春年华的 24 岁回到三线城市洛阳工作,至今已经 6 年有余。一不小心又暴露了自己的实际年龄,但老读者都知道,我驻颜有术,上次去看房子,业务员肯定地说:“小哥肯定比我小,我今年还不到 24。”我只好强颜欢笑:“你说得对。” 从我拥有记忆到现在进入而立之年,我觉得,我做过最明智的选择有下面三个: 1)高中三年,和一位女同学保持着算不上朋友的冷淡关系;大学半年,把这位女同学追到...
CSS操作之你不得不知的一些小技巧(一)ヾ(Ő∀Ő๑)ノ太棒了!!
目录 CSS单行/多行文本,超出隐藏并显示省略号 1. CSS单行/多行文本,超出隐藏并显示省略号 方法一:使用CSS属性 单行文本溢出显示省略号 width: 100px; overflow: hidden; text-overflow:ellipsis; //文本溢出显示省略号 white-space: nowrap; //文本不会换...
强烈推荐 10 款珍藏的 Chrome 浏览器插件
Firebug 的年代,我是火狐(Mozilla Firefox)浏览器的死忠;但后来不知道为什么,该插件停止了开发,导致我不得不寻求一个新的网页开发工具。那段时间,不少人开始推荐 Chrome 浏览器,我想那就试试吧,期初我觉得用起来很别扭,毕竟我不是一个“喜新厌旧”的人。但用的次数越来越多,也就习惯了。 Chrome 浏览器有一个好处,就是插件极其丰富,只有你想不到的,没有你找不到的,这恐怕是...
我以为我对数据库索引十分了解,直到我遇到了阿里面试官。
索引的数据结构分析,数据库面试到索引最常见的问题分析,我总结了一下。
相关热词 c#判断数字不得为负数 c#帧和帧协议 c#算偏移值 c# 在枚举中 c#6 字符串 插值 c#程序中的占位符标签 c#监听数组变化 c# vlc c#索引实现 c# 局域网广播通信
立即提问