我有两个表需要以特定的方式组合。我需要在一个表中显示一次信息,但我需要下表中的信息来返回它拥有的每个匹配数据。这是我的例子
用户
| 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 |
---------------------
但我想删除所有名称重复项。任何人都可以帮助解决这个问题
答案 0 :(得分: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 |
答案 1 :(得分: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中完成的。在处理行的循环中,只需检查名称是否与前一个名称相同,并将该表字段留空。或者使用网格小部件为您自动分组。