繁体   English   中英

复杂的SQL连接查询的问题

[英]issue with a complex Sql join query

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

用户


| 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   |
---------------------

但我想删除所有重复的名字。 谁能帮助这个查询

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

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 |
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中完成的。 在处理行的循环中,只需检查名称是否与上一个相同,然后将该表字段保留为空白。 或者使用网格小部件为您自动分组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM