2013-02-21 2 views
2

Я извлекаю данные из трех таблиц. Я хочу отобразить эти данные на странице jsp. Моя проблема в том, что после того, как данные соединения являются избыточнымиКак удалить избыточные данные во время отображения в 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 

Здесь я fatching данные, используя набор результатов и показывать в 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 для приведенных выше кода

ответ

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

+0

не работает, показывая все 9 строк –

+0

Как сделать вы хотите показать свой результат как? – asifsid88

+0

question.id, question.title, question.body, tag_names (java, mysql, jquery) ответы (хорошо, отлично, нормально) см. Http://sqlfiddle.com/#!2/e9606/21 –

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 
Смежные вопросы