首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在jsp中显示时删除冗余数据

如何在jsp中显示时删除冗余数据
EN

Stack Overflow用户
提问于 2013-02-21 13:13:19
回答 2查看 1.1K关注 0票数 2

我正在从三个表中获取数据。我想在jsp页面中显示这些数据。我的问题是连接后的数据是冗余的

我不想显示冗余数据。

我的表是

代码语言:javascript
运行
复制
 create table questions(id integer,title varchar(140),body varchar(2000),
 primary key(id));

 create table question_tags(id integer,tag_name varchar(50),question_id integer,
 primary key(id),foreign key(question_id) references questions(id));


create table answers(id integer,answer varchar(2000),question_id integer,
primary key(id),foreign key(question_id) references questions(id));

用于获取数据的查询

代码语言:javascript
运行
复制
SELECT questions.*,`question_tags`.*, `answers`.* 
FROM `questions`
JOIN  `answers` 
ON `questions`.`id` = `answers`.`question_id`
JOIN `question_tags` 
ON `questions`.`id` = `question_tags`.`question_id`
WHERE `questions`.`id` = '1'

获取数据后的结果

代码语言:javascript
运行
复制
 ID     TITLE   BODY    TAG_NAME    QUESTION_ID ANSWER
  1     a   hello   java                 1          good
  1     a   hello   java                 1          exellent
  1     a   hello   java                 1          ok
  1     a   hello   mysql                1          good
  1     a   hello   mysql                1          exellent
  1     a   hello   mysql                1          ok
  1         a   hello   jquery               1          good
  1     a   hello   jquery               1          exellent
  1     a   hello   jquery               1          ok

在这里,我使用结果集填充数据并在jsp中显示。

我想在我的jsp中显示以下数据

代码语言:javascript
运行
复制
  question.id|question.title|question.body|tag_names | answers
      1               a           hello       java        good  
                                              mysql       excellent
                                              jquery      ok                               

这只适用于少数几行。这里的o/p行总数是1*3*3=9,如果表中的数据增加了,那么重复数据就会增加,如何解决它。这是上述代码的sql fiddle

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-21 13:16:08

在select语句中使用distinct子句,以避免出现重复记录

代码语言:javascript
运行
复制
SELECT distinct questions.*,`question_tags`.*, `answers`.* 
FROM `questions`
JOIN  `answers` 
ON `questions`.`id` = `answers`.`question_id`
JOIN `question_tags` 
ON `questions`.`id` = `question_tags`.`question_id`
WHERE `questions`.`id` = '1'

已更新

代码语言:javascript
运行
复制
ResultSet rs = st.execute();   //Assuming that you have the resultset

Set<String> id = new LinkedHashSet<String>();
Set<String> body = new LinkedHashSet<String>();
Set<String> tag_name = new LinkedHashSet<String>();
Set<String> answer = new LinkedHashSet<String>();

while(rs.next())
{
    id.add(rs.getString("id"));
    body.add(rs.getString("body"));
    tag_name.add(rs.getString("tag_name"));
    answer.add(rs.getString("answer"));
}

因为使用了LinkedHashSet,所以只会存储不同的值。现在,您需要迭代以填充您的表

备注:这仅限于特定的问题ID

票数 1
EN

Stack Overflow用户

发布于 2013-02-21 21:56:29

我所期待的是这个

代码语言:javascript
运行
复制
SELECT  `questions`.`id` AS  `question_id` ,
(
SELECT GROUP_CONCAT(  `question_tags`.`tag_name` SEPARATOR ';') 
FROM  `question_tags` 
WHERE  `question_id` =1
) AS  `Tags` ,
(
SELECT GROUP_CONCAT(  `answers`.`answer` SEPARATOR ';' ) 
FROM  `answers` 
WHERE  `question_id` =1
) AS  `Answers` 
FROM  `questions` 
WHERE  `questions`.`id` =1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14995012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档