2015-10-06 2 views
5

У меня есть две таблицы Как я могу избежать дублирования во время объединения двух таблиц

1. test 1 

    2. test 2 

Первая таблица имеет

**id** - **name** 

1  - kerala 

2  - Tamilnadu 

Второй стол

**name** - **jid** 

    value 1 - 1 

    value 2 - 1 

    value 3 - 1 

    value 4 - 1 

    value 5 - 2 

Мой запрос -

SELECT t1.name, t2.name 
FROM test1 t1 
INNER JOIN test2 t2 
WHERE t1.id = t2.jid 

теперь я получить этот результат

**name** - **name** 

Kerala - value 1 

kerala - value 2 

kerala - value 3 

kerala - value 4 

Но мне нужен результат, как этот

Kerala - value 1 

     - value 2 

     - value 3 

     - value 4 

значение 'Кералы' не должны повторяться.

+4

То, что вы просите, как правило, делается в слое, который отображает данные, а не тот, который генерирует его. Следовательно, вы должны сохранить SQL, который у вас есть, и удалить дубликаты в разных слоях вашего решения. –

ответ

2

вы пользователь Группа Concat method.Pls проверить ниже запроса

SELECT t1.name,GROUP_CONCAT(t2.name) FROM test1 t1 INNER JOIN test2 t2 WHERE t1.id = t2.jid 
+0

Спасибо. он отлично работает :) –

0

Я не думаю, что это возможно - вы не можете иметь пустые значения внутри возвращаемых значений.

1

Вы можете использовать следующий запрос:

SELECT CASE 
      WHEN t2.name = t3.firstName THEN t1.name 
      ELSE '' 
     END AS name, 
     t2.name 
FROM test1 t1 
INNER JOIN test2 t2 ON t1.id = t2.jid 
INNER JOIN (
    SELECT jid, MIN(name) AS firstName 
    FROM test2 
    GROUP BY jid) AS t3 ON t2.jid = t3.jid 

Это произведет необходимый результат до тех пор, пока существует одна запись имеющей MIN(name) за jid в test2 стол.

Demo here

1

попробовать это

SELECT IF (@oldname = name1,'',name1), 
     name2, 
     @oldname:=name1 AS oldname FROM 
    (
    SELECT t1.name AS name1, t2.name AS name2 
    FROM test1 t1 
    INNER JOIN test2 t2 
    WHERE t1.id = t2.jid 
) t, 
    (SELECT @oldname:='') tmp;