2015-10-06 65 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 

但我需要這樣

012結果
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)jidtest2表中。

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;