mysql - LEFT JOIN 只显示第一个表的第一行一次

标签 mysql sql left-join

我有两个:

先发表:table1

id   |  text   
-------------
1       t1      
2       t2           
...

第二张表:table2

id   |  idTable1 |  text2
-------------------------------
1       1           text1Table2
2       1           text2Table2
3       1           text3Table2
4       2           text4Table2
5       2           text5Table2
...

如果我做左连接:

SELECT * FROM table1 t1 LEFT JOIN table2 t2 ON t1.id=t2.idTable1

结果是这样的:

id  |   text |  id | idTable1 | text2
------------------------------------------
1       t1      1   1           text1Table2
1       t1      2   1           text2Table2
1       t1      3   1           text3Table2
2       t2      4   2           text4Table2
2       t2      5   2           text5Table2
...

但我希望第一个表中重复的行只显示一次,如下所示:

id  |   text |  id | idTable1 | text2
------------------------------------------
1       t1      1   1           text1Table2
1       -       2   1           text2Table2
1       -       3   1           text3Table2
2       t2      4   2           text4Table2
2       -       5   2           text5Table2
...

编辑: 并将此结果添加到 mysql View 中

最佳答案

您可以使用变量来做到这一点:

SELECT t1.id,
       if(@prevtext = text, '-', if(@prevtext := text, t1.text, t1.text)) as text,
       t2.id, t2.idTable1, t2.text2
FROM table1 t1 LEFT JOIN
     table2 t2
     ON t1.id = t2.idTable1 CROSS JOIN
     (select @prevtext := '') vars
ORDER BY t1.id, t1.text;

但是,我不鼓励你这样做。 SQL 中的结果集与表具有相同的属性。即,每一行都独立于其他行。当您以这种格式放置数据时,您需要对结果集进行特定排序,因此它不再具有 SQL 表的属性。

编辑:

我认为这对于与 View 兼容的子查询是不可能的,但考虑到您的查询数据(t2 id 已排序),这可能是可能的:

SELECT t1.id,
       (case when text = (select text
                          from table2 tt2
                          where tt2.id < t2.id
                          order by tt2.id desc
                          limit 1
                         )
             then '-' else text
        end) as text
       t2.id, t2.idTable1, t2.text2
FROM table1 t1 LEFT JOIN
     table2 t2
     ON t1.id = t2.idTable1 
ORDER BY t1.id, t2.id;

关于mysql - LEFT JOIN 只显示第一个表的第一行一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24833582/

相关文章:

MySQL:如何根据结果集中的条件仅返回一行

MySQL - UNHEX(HEX(UTF-8)) 问题

mysql - 像 JOIN 一样创建表

php - 尝试显示成员列表

php - 尝试将两个分组查询合并为一个

MySQL 左连接计数不工作

mysql 计算有条件的子表行

MySQL - 使用左连接获取未分配资源的复杂查询

SQL Server 将查询输出为 UTF8 而不是 UTF16

MYSQL GUID 触发器