0

我有两个需要以特定方式组合的表。我需要一个表中的信息显示一次,但我需要下一个表中的信息来返回它拥有的每个匹配数据。这是我的例子

用户


| id | name |
-------------
| 1  | mike |
| 2  | john |
| 3  | bill |
-------------

班级

-----------------
| uid | subject | 
-----------------
| 1   | math    |
| 1   | English |
| 2   | math    |
| 3   | math    |
| 3   | English |
-----------------

预期成绩

--------------------
|name   | mike      |
---------------------
|subject| math      |
|       | English   |
---------------------

或者

--------------------
|name   |  subject  |
---------------------
|mike   | math      |
|       | English   |
---------------------

这是我当前的查询

SELECT user.name, class.subject
FROM user
join class on class.uid = user.id
WHERE (user.name like '%mike%')

返回

--------------------
|name   |  subject  |
---------------------
|mike   | math      |
|mike   | English   |
---------------------

但我想删除所有重复的名称。任何人都可以帮助这个查询

4

2 回答 2

2

您可以使用连接类型函数将值连接成分隔字符串...例如

Select u.name, (
      select
      GROUP_CONCAT(c.subject) FROM classes c where u.id = c.uid
    ) As subjects
    From user u

所以你最终得到

--------------------
|name   |  subjects  |
---------------------
|mike   | math, English |
于 2013-01-01T00:34:30.483 回答
1
set @lastname = null;
select case when name = @lastname
            then ""
            else @lastname := name
       end name,
       subject
from (select name, subject
      from user
      join class on id = uid
      where name like '%mike%'
      order by name) x

小提琴

但是,正如其他人在评论中指出的那样,这通常是在应用程序代码中完成的,而不是在 SQL 中。在处理行的循环中,只需检查名称是否与前一个相同,然后将该表字段留空。或者使用为您自动分组的网格小部件。

于 2013-01-01T00:31:19.390 回答