Mysql 如何在连接两个表时避免重复

Mysql 如何在连接两个表时避免重复,mysql,join,Mysql,Join,我有两张桌子 1. test 1 2. test 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 第一桌有 **id** - **name** 1

我有两张桌子

  1. test 1

  2. test 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

第一桌有

**id**  -   **name**

 1      -    kerala 

 2      -    Tamilnadu

第二桌

  **name**  -  **jid**

   value 1  -  1

   value 2  -  1

   value 3  -  1

   value 4  -  1

   value 5  -  2

我的查询--

  1. test 1

  2. test 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

现在我得到了这个结果

  1. test 1

  2. test 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


“喀拉拉邦”的值不应重复

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

您可以使用用户组concat方法。请检查下面的查询

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

您可以使用以下查询:

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
只要在
test2
表中有一条记录具有
MIN(name)
per
jid
,这将产生所需的结果


试试这个

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;

您要求的通常是在显示数据的层中完成的,而不是在生成数据的层中完成的。因此,您应该保留现有的SQL,并在解决方案的不同层中删除重复的SQL。