2

3 つのテーブルからデータを取得しています。これらのデータを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 フィドルです

4

2 に答える 2

1

selectステートメントで節を使用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 に限定されます

于 2013-02-21T05:16:07.927 に答える
0

私が期待していたのはこれでした

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
于 2013-02-21T13:56:29.440 に答える