如何避免重复,同时连接两个表

问题描述:

我有两个表如何避免重复,同时连接两个表

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,并在解决方案的不同层中删除重复项。 –

可以用户组CONCAT method.Pls检查下面的查询

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

谢谢。它完美的作品:) –

我不认为这是可能的 - 你不能有空值返回值。

您可以使用下面的查询:

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

试试这个

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;