多值mysql查询
我有一个数据库和一张学生桌。结构是这样的多值mysql查询,mysql,sql,multiple-value,Mysql,Sql,Multiple Value,我有一个数据库和一张学生桌。结构是这样的 id name --- ----- 1 Tini 2 Eka 然后是放书的桌子 id title --- ------ 1 Cinderella's story 2 Pinochio 3 Mickey Mouse 那就借钱吧 id students_id books_id --- ------------ ---------
id name
--- -----
1 Tini
2 Eka
然后是放书的桌子
id title
--- ------
1 Cinderella's story
2 Pinochio
3 Mickey Mouse
那就借钱吧
id students_id books_id
--- ------------ ---------
1 1 1,3
2 2 2,3
我如何得到蒂尼是借用灰姑娘的故事和米老鼠?
我已经试过这样问了
select students.*, books.* , borrowing.*
(select books.title from borrowing
join books on books.id = borrowing.books_id
where books_.id = borrowing.books_id limit 1) as books_title
from borrowing
join students on students.id = borrowing.students_id
join books on books.id = borrowing.books_id
GROUP BY books.title
但是它给我带来了一个错误与其修复查询,不如规范化关系表的数据 更改保存数据的方式,如:
id students_id books_id
--- ------------ ---------
1 1 1
2 1 3
3 2 2
4 2 3
id列也不是必需的,您可以省略它
然后获取每个学生的借阅清单非常简单:
SELECT t1.name, GROUP_CONCAT(t3.title) AS borrowed_books
FROM students t1
LEFT JOIN borrowing t2 ON t2.students_id = t1.id
LEFT JOIN books t3 ON t3.id = t2.books_id
GROUP BY t1.name
使用此函数,在数据库中创建此函数
ALTER FUNCTION [dbo].[funcSplit]
(
@param NVARCHAR(MAX),
@delimiter CHAR(1)
)
RETURNS @t TABLE (val NVARCHAR(MAX))
--select * from dbo.funcSplit('1,3',',')
AS
BEGIN
SET @param += @delimiter
;WITH a AS
(
SELECT CAST(1 AS BIGINT) f,
CHARINDEX(@delimiter, @param) t,
1 seq
UNION ALL
SELECT t + 1,
CHARINDEX(@delimiter, @param, t + 1),
seq + 1
FROM a
WHERE CHARINDEX(@delimiter, @param, t + 1) > 0
)
INSERT @t
SELECT SUBSTRING(@param, f, t - f)
FROM a
OPTION(MAXRECURSION 0)
RETURN
END
然后执行这个代码
select s.sname,bk.bname,f.val from stud as s
left join borrowing as b on s.sid = b.students_id
cross apply dbo.funcSplit(b.bookid,',') as f
left join books as bk on bk.bookid = f.val
where sid = 1
实际上,您必须在查询中添加用户组 假设您应该有一个像上面答案中所说的@sotondolphin这样的表来使用下面的查询 试试这个
select user_id,group_concat(book_id) from userTable
inner join book_borrow_tbl on userTable.user_id=book_borrow_tbl.user_id
group by user_id
select user_id,group_concat(book_id) from userTable
inner join book_borrow_tbl on userTable.user_id=book_borrow_tbl.user_id
group by user_id