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

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

不应重复使用值“Kerala”。


4
你所要求的通常在显示数据的层面上完成,而不是生成数据的层面上。因此,你应该保留你已有的 SQL 查询语句,然后在解决方案的不同层面上去除重复数据。 - Mihai Ovidiu Drăgoi
4个回答

2
你可以使用Group concat方法。请查看以下查询。
 SELECT t1.name,GROUP_CONCAT(t2.name) FROM test1 t1 INNER JOIN test2 t2 WHERE t1.id = t2.jid

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

只要在test2表中每个jid有一个MIN(name),那么这将产生所需的结果。 这里有演示

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;

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接