这个查询语句查询出来的数据会显示多条重复的,但是实际表中数据又只有一条,是什么问题?该怎么改?

如题所述

你又不是只查一张表, 你是多表关联了。
实际表中数据又只有一条,是你某一张表这样吧, 
关联后,这一条数据可能跟别的表都能关联上,所以就会变成多条了。
如果select 出来的项全相同,你可以distinct
追问 : 对,就是像你说的一条数据跟别的表都能关联上,但是该怎么解决呢? distinct我加在select后面,ID前面又报错,该怎么解决?

追答 : distinct不能用就按下面的,select 后面多少项 group by 后面就写多少as 前面的 select a as A, b as B, c as C from ... left joing ... where.. group by a,b,c
温馨提示:内容为网友见解,仅供参考
第1个回答  2016-06-24
你又不是只查一张表, 你是多表关联了。
实际表中数据又只有一条,是你某一张表这样吧, 
关联后,这一条数据可能跟别的表都能关联上,所以就会变成多条了。
如果select 出来的项全相同,你可以distinct追问

对,就是像你说的一条数据跟别的表都能关联上,但是该怎么解决呢?
distinct我加在select后面,ID前面又报错,该怎么解决?

追答

distinct不能用就按下面的,select 后面多少项 group by 后面就写多少as 前面的

select a as A, b as B, c as C
from ...
left joing ...
where..
group by a,b,c

本回答被提问者采纳
第2个回答  2020-11-13
子查询就是查询中又嵌套的查询,表连接都可以用子查询,但不是所有子查询都能用表连接替换,子查询比较灵活,方便,形式多样,适合用于作为查询的筛选条件,而表连接更适合与查看多表的数据。

子查询不一定需要两个表有关联字段,而连接查询必须有字段关联(所谓的主外键关系)

表关联的效率要高于子查询,因为子查询走的是笛卡尔积
表关联可能有多条记录,子查询只有一条记录,如果需要唯一的列,最好走子查询
对于数据量多的肯定是用连接查询快些,原因:因为子查询会多次遍历所有的数据(视你的子查询的层次而定),而连接查询只会遍历一次。

但是数据量少的话也就无所谓是连接查询还是子查询,视自己的习惯而定。一般情况下还是用子查询来的好,容易控制

为什么子查询比连接查询(LEFT JOIN)效率低
MySQL从4.1版本开始支持子查询,使用子查询进行SELECT语句嵌套查询,可以一次完成很多逻辑上需要多个步骤才能完成的SQL操作。子查询虽然很灵活,但是执行效率并不高。
那么问题来了,什么是子查询?为什么它的效率不高?
子查询:把内层查询结果当作外层查询的比较条件
第3个回答  2020-11-13
首先附上代码:

public List<YbReview> findSome(Integer articleid)throws Exception{
List<YbReview> list=new ArrayList<YbReview>();
Connection con=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
YbReview ybReview=null;
YbUser ybUser=null;
try{
con=DBUtil.getDb();
String sql="select a.user_name,b.* from yb_user a,yb_review b where a.user_id=b.user_id and b.article_id=? order by review_datetime desc";
pstmt=con.prepareStatement(sql);
pstmt.setInt(1,articleid);
rs=pstmt.executeQuery();
if(rs.next()){
ybReview=new YbReview();
ybUser=new YbUser();
ybUser.setUsername(rs.getString("user_name"));
ybReview.setReviewid(rs.getInt("review_id"));
ybReview.setArticleid(rs.getInt("article_id"));
ybReview.setReviewContent(rs.getString("review_content"));
ybReview.setReviewdatetime(rs.getDate("review_datetime"));
ybUser.setUserid(rs.getInt("user_id"));
ybReview.setYbuser(ybUser);
list.add(ybReview);
}
}finally{
DBUtil.CloseDataBase();

}

return list;
}
2 然后,我就很郁闷了,明明是多条记录,可是出来的JSP页面上总是只有一条记录,看了SQL语句也正确啊,找了很久才发现是
if(rs.next()){的问题,将if改为
第4个回答  2016-06-24
select distinct追问

我加在select后面就报错啊,怎么解?

追答

distinct distinc

这个查询语句查询出来的数据会显示多条重复的,但是实际表中数据又只有...
你又不是只查一张表, 你是多表关联了。实际表中数据又只有一条,是你某一张表这样吧,关联后,这一条数据可能跟别的表都能关联上,所以就会变成多条了。如果select 出来的项全相同,你可以distinct 追问 : 对,就是像你说的一条数据跟别的表都能关联上,但是该怎么解决呢? distinct我加在se...

sql重复数据只取一条记录
1、SQL SELECT DISTINCT 语句 在表中,可能会包含重复值。这并不成问题,不过,仅仅列出不同(distinct)的值。关键词 DISTINCT 用于返回唯一不同的值。语法:SELECT DISTINCT 列名称 FROM 表名称 使用 DISTINCT 关键词 SELECT DISTINCT Company FROM Orders 2、子查询限制返回结果 SELECT * FROM TestDat...

...多条记录完全重复,怎么删除重复记录,只保留一条,sql语句怎么写_百度...
如果只是要查询不是重复的记录的话 select distinct * from 表 如果是将多余的重复记录删除 首先将不是重复的数据提取出来,保存到一个临时表中 select distinct * into #temp from 表 然后删除原来的表 delete from 表 最后往里面插入临时表的数据 insert into 表 select * from #temp ...

sql语句查询为什么显示多条相同数据
1、确保数据存储是否有重复情况。2、条件语句对应多条,一对多的情况会出现重复。3、多表关联查询也会出现,比如,人员信息查询,关联到部门,一个部门有多个人是正常。

oracle某个字段有重复数据,如何删除多余数据只保留1条
1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断。2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录。3、查找表中多余的重复记录(多个字段)。4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录。5、查找表中多余的...

数据表中存在多条相同数据,相同数据只保留一条,多的删除掉,写出SQL语句...
select distinct name from user表示从user表中查找名字不相同的记录,筛选了重复的数据

sql删除重复数据且只保留一条?
这个简单,凡是重复的保留一个就可以了,是这个意思吧。那么就是 select min(id) from table group by title这样的就能查出来每个title的最小的id,就算有重复的,也能显示出来最小的id,如果没有重复,那么这条语句也会得到唯一的id 然后where id not in(上面的语句)这样就可以找到所有的不在...

sql查询语句查出来的数据重复显示怎么处理
主要有三种方法 (1)、rowid方法 根据Oracle带的rowid属性,可以进行判断是否存在重复语句 (2)、group by 方法 Group By语句从英文的字面意义上理解就是“根据(by)一定的规则进行分组(Group)”(3)、distinct方法

SQL重复数据只显示一条,查询语句怎么写
SELECT DISTINCT * FROM 表名

oracle如何删除重复数据oracle如何删除重复数据只保留一条
以下语句可以找出哪些数据是重复的:挑选 字段1,字段2,计数(*)从 表名 组 经过 字段1,字段2 拥有 计数(*)这种先创建临时表再删除的操作,比直接用一条语句删除要高效得多。这时候可能会有人跳出来说,什么?你打电话给我 oracle数据库中如何用sql语句查出重复字段以及如何删除?试试这个吧:把...

相似回答