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

 我来答
牛牪犇E6

2020-11-13 · TA获得超过5.9万个赞
知道大有可为答主
回答量:7.2万
采纳率:93%
帮助的人:5131万
展开全部
你又不是只查一张表, 你是多表关联了。
实际表中数据又只有一条,是你某一张表这样吧, 
关联后,这一条数据可能跟别的表都能关联上,所以就会变成多条了。
如果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
百事牛
2024-10-28 广告
针对Excel表格的密码解锁问题,深圳奥凯丰科技有限公司提供专业的软件解决方案,旨在帮助用户快速、安全地恢复或移除表格中的保护密码。我们的软件采用先进的密码恢复技术,能够有效应对多种加密类型,包括工作簿打开密码、工作表保护密码等。用户只需简... 点击进入详情页
本回答由百事牛提供
bobby_2007
2016-06-24 · TA获得超过683个赞
知道小有建树答主
回答量:972
采纳率:57%
帮助的人:483万
展开全部
你又不是只查一张表, 你是多表关联了。
实际表中数据又只有一条,是你某一张表这样吧, 
关联后,这一条数据可能跟别的表都能关联上,所以就会变成多条了。
如果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
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帐号已注销

2020-11-13 · TA获得超过3.3万个赞
知道大有可为答主
回答量:2.7万
采纳率:80%
帮助的人:866万
展开全部
子查询就是查询中又嵌套的查询,表连接都可以用子查询,但不是所有子查询都能用表连接替换,子查询比较灵活,方便,形式多样,适合用于作为查询的筛选条件,而表连接更适合与查看多表的数据。

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

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

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

为什么子查询比连接查询(LEFT JOIN)效率低
MySQL从4.1版本开始支持子查询,使用子查询进行SELECT语句嵌套查询,可以一次完成很多逻辑上需要多个步骤才能完成的SQL操作。子查询虽然很灵活,但是执行效率并不高。
那么问题来了,什么是子查询?为什么它的效率不高?
子查询:把内层查询结果当作外层查询的比较条件
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
来自灵通山朴素的西葫芦
2020-11-13 · TA获得超过2088个赞
知道大有可为答主
回答量:4584
采纳率:92%
帮助的人:107万
展开全部
首先附上代码:

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改为
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2016-06-24
展开全部
select distinct
追问

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

追答
distinct   distinc
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式