【问题标题】:How to remove redundant data while displaying in jspjsp显示时如何去除多余数据
【发布时间】:2013-02-06 08:22:49
【问题描述】:

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

我不想显示冗余数据。

我的桌子是

 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));

查询以获取数据

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'

获取数据后的结果

 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中显示以下数据

  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

【问题讨论】:

    标签: java mysql sql jsp jdbc


    【解决方案1】:

    在您的选择语句中使用distinct 子句以获取不重复记录

    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'
    

    更新

    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

    【讨论】:

    • question.id,question.title,question.body, tag_names(java,mysql,jquery) 答案(good,excellent,ok) 请看sqlfiddle.com/#!2/e9606/21
    • 你的意思是说你想要 java, mysql, jquery 在一个单元格中,good,excellent,ok 的情况也是如此??
    • 这个问题我无法通过加入来解决。如果行数不增加,则连接数据也会增加。
    • 不,如果它在不同的外壳中,那么也没有问题。但我只想要三个值而不是其他值
    • 您能否定义一个预期结果的样本。请在您的问题中更新它(所需输出的示例)
    【解决方案2】:

    我期待的是这个

    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
    

    【讨论】:

      猜你喜欢
      • 2023-01-05
      • 2013-05-14
      • 2021-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-04
      • 2021-10-23
      • 2021-03-29
      相关资源
      最近更新 更多