为什么俩条sql语句得到的结果不一样

问题描述

dto_i_xiangkanxk:相刊表dto_i_bbx_comment:评论表dto_i_xk_detail:相刊详细表我想查询评论次数最多的相刊selectcount(bbx.c_id)ascounts,xk.dix_idfromdto_i_xiangkanxkleftjoindto_i_bbx_commentbbxonxk.dix_id=bbx.s_idleftjoindto_i_xk_detailasdetonxk.DIX_ID=det.DIX_IDgroupbyxk.dix_idorderbycountsdesclimit18改sql语句得到的结果是正确的,counts是正确的---------------------------------------------------------------------------selectcount(bbx.c_id)ascounts,xk.dix_idfromdto_i_xiangkanxkleftjoindto_i_bbx_commentbbxonxk.dix_id=bbx.s_idgroupbyxk.dix_idorderbycountsdesclimit18该sql语句得到的结果是错误的,counts值要多得多请问是为什么呀

解决方案

解决方案二:
leftjoindto_i_xk_detailasdetonxk.DIX_ID=det.DIX_ID这句话是相刊表去关联相刊表明细表,如果相刊表明细表中根本没有记录去关联相刊表的话那么查询的记录自然多一些了。如下:只看关联字段相刊表dix_id12相刊表明细表DIX_ID1有关联1记录没关联2条记录
解决方案三:
leftjoindto_i_xk_detailasdetonxk.DIX_ID=det.DIX_ID左关联了肯定要比你原先的多LEFTJOIN关键字会从左表(table_name1)那里返回所有的行,即使在右表(table_name2)中没有匹配的行。
解决方案四:
引用2楼java_cxrs的回复:

leftjoindto_i_xk_detailasdetonxk.DIX_ID=det.DIX_ID左关联了肯定要比你原先的多LEFTJOIN关键字会从左表(table_name1)那里返回所有的行,即使在右表(table_name2)中没有匹配的行。

恩,会查出多的记录
解决方案五:
该回复于2010-12-06 08:43:02被版主删除
解决方案六:
你后面不是还leftjoin一次吗?结果要多最后那张表的记录*3次吧
解决方案七:
分两步来执行的话,你就很清楚了:先做Joint操作:selectbbx.c_id,xk.dix_idfromdto_i_xiangkanxkleftjoindto_i_bbx_commentbbxonxk.dix_id=bbx.s_idleftjoindto_i_xk_detailasdetonxk.DIX_ID=det.DIX_ID再做对上面的结果表做count操作

时间: 2024-09-10 14:51:51

为什么俩条sql语句得到的结果不一样的相关文章

通过一条sql语句访问不同数据库服务器中的数据库对象的方法

对象|访问|服务器|数据|数据库|语句 在我们做数据库程序开发的时候,经常会遇到这种情况:需要将一个数据库服务器中的数据导入到另一个数据库服务器的表中.通常我们会使用这种方法:先把一个数据库中的数据取出来放到某出,然后再把这些数据一条条插入到目的数据库中,这种方法效率较低,写起程序来也很繁琐,容易出错.另外一种方法是使用bcp或BULK INSERT语句,将数据导入到一个文件中,再从此文件中导出到目的数据库,这种方法虽然效率稍高,但也有很多不如意的地方,单是在导入时怎样找到另外一台机器上的数据导

sql oracle-关于怎么快速执行10000条sql语句

问题描述 关于怎么快速执行10000条sql语句 由于我的数据库有几千万条数据,每一条查询都会花费0.5秒,但是10000条查询需要半个多小时,所以希望有快速一点的方法,求各位大神指点,下面是我的函数. /** * 这是一个横着的for循环,图的缩放级别是13,11*10方格,不同区域到不同区域的上车点数量 */ public static void CountListPointsOfOnetoOne() { ArrayList ListSql = new ArrayList(); double

sqlserver-求各位大神给一条sql语句,急急急!!!

问题描述 求各位大神给一条sql语句,急急急!!! 我用的是sqlserver数据库,我希望完成这样的功能,有个数据库Test,里面有三张表ABC,我对其中的一张A表进行的分区,另外两张表没有分区,我希望通过sql语句查询到已经分区的表,就是要返回表A,只需获得表A的名称就行了.

把这四条sql语句从sqlsever变成oracle的sql语句,求帮忙

问题描述 把这四条sql语句从sqlsever变成oracle的sql语句,求帮忙 1C 1.SELECT top 1 MENUID+1 from app_menu ORDER BY CAST(MENUID AS int) desc 2.SELECT top 1 idfileNamefilePathcreateTimemd5fileSize FROM VIS_file WHERE md5=#md5# 3. SELECT top 1 USERIDREALNAMEGENDEROTELOEMAILQQ

请帮忙写一条SQL语句查询前一小时信息

问题描述 请帮忙写一条SQL语句查询前一小时信息 MSSQLServer,有个字段DateTime:2015-03-09 16:08:51.617 我想查询前一小时的信息,因为我公司是45分下班的,所以前一小时应该是14:45:00~14:45:00. 请问如何写一条语句可以查到当前小时的前一小时的信息呢?谢谢帮忙. 解决方案 select * from table where DATEDIFF('h',DateTime,now())>1 and DATEDIFF('h',DateTime,no

使用一条sql语句实现多表查询

问题描述 使用一条sql语句实现多表查询 假设有这样3张表: 学生表S (id,Tid,name,sex,age) 教师表T (id,Sid,name,sex,age) 成绩表R (id(学生的id),result(成绩)) 怎样使用一条sql查询成绩大于90的男学生的男性老师的姓名 解决方案 select * from R inner join S on R.id=S.Sid inner join T on xxxxxx where result>90 你学生和老师好像没有对应关系,所以第二个

sql查询-求帮忙优化我这条sql语句

问题描述 求帮忙优化我这条sql语句 首先说一下下面sql语句要用到的表的基本情况: 一.有三张表,一张叫equipment,一张叫sensor,一张叫sensorInputData 二.三表关系是equipment下有多个sensor,sensor下有多个sensorInputdata,所以sensor下有一个equipment的主键quipmentId做外键,sensorInputData下也有一个sensor的主键sensorId做外键,其他都是各自表的属性,应该能比较清晰的看出来 下面是

sql server-求一条sql语句 sqlserver数据库

问题描述 求一条sql语句 sqlserver数据库 刷卡表,有ID,刷卡时间.时间等并和用户表形成多对一关系,使用的是sqlserver. 我要取得是"昨天,每个用户的最大刷卡时间和最小刷卡时间的刷卡数据". 我的SQL不是很好,昨天.最大刷卡时间和最小都能搞出来,但是加个每个用户就乱了: 因为每个用户都可能会有多条刷卡数据. ...求解 解决方案 select b.username, max(刷卡时间) 最大刷卡时间, min(刷卡时间) 最小刷卡时间 from 刷卡表 a inn

求一条sql语句,单表查询的

问题描述 求一条sql语句,单表查询的 表结构 (姓名,课程,成绩) 现在求获的该表总成绩最高学员的名字 解决方案 mysql 数据库select sum(成绩) as t from table group by 姓名 order by t limit 0,1 oracle数据库 select * from (select sum(成绩) as t from table group by 姓名 order by t) WHERE ROWNUM<=1 sqlserver数据库 select top