[英]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.