猿问

SQL多表查询问题

数据设计如下
books表书籍表,每本书的有很多文章,保存在articles字段中

articles表包为文章表,每篇文章由多个人编辑完成(保存在authors列中)
author表包含作者信息
不使用游标,查询参与编写ID号为1的书的作者
结果为
id    authorName
1     张三
2     李四
3     王五
4     小麦
5     小王
6     小李


各表数据

---------------------------------------------------------------
books表 数据如下
id articles
1  1,2,3
2  4,5,6
---------------------------------------------------------
articles 表数据如下
id   authors
1    1,2,3
2    4,5,6
3    4,5,6
4    4,5,6
5    1,2,3
6    1,2,3
--------------------------------------------
author表 数据如下
id    authorName
1     张三
2     李四
3     王五
4     小麦
5     小王
6     小李

回首忆惘然
浏览 517回答 2
2回答

翻阅古今

USE tempdbGOCREATE TABLE BOOKS(ID INT IDENTITY(1,1) PRIMARY KEY NOT NULL,ARTICLES NVARCHAR(20))GOINSERT INTO BOOKSSELECT '1,2,3' UNIONSELECT '4,5,6' GOCREATE TABLE ARTICLES(ID INT IDENTITY(1,1) PRIMARY KEY NOT NULL,AUTHORS NVARCHAR(20))GOINSERT INTO ARTICLESSELECT '1,2,3' UNIONSELECT '4,5,6' UNIONSELECT '4,5,6' UNIONSELECT '4,5,6' UNIONSELECT '1,2,3' UNIONSELECT '1,2,3' GOCREATE TABLE AUTHORS(ID INT IDENTITY(1,1) PRIMARY KEY NOT NULL,AUTHORNAME NVARCHAR(8))GOINSERT INTO AUTHORSSELECT '张三' UNIONSELECT '李四' UNIONSELECT '王五' UNIONSELECT '小麦' UNIONSELECT '小王' UNIONSELECT '小李' GOSELECT * FROM BOOKSSELECT * FROM ARTICLESSELECT * FROM AUTHORSGOALTER PROC GETBOOKAUTHORSBYID@BOOKID INTASDECLARE @SQL NVARCHAR(200),@ARTICLES NVARCHAR(20),@AUTHORS NVARCHAR(50)SET @AUTHORS=''SELECT @ARTICLES=ARTICLES FROM BOOKS WHERE ID=@BOOKIDSET @SQL = 'SELECT @A=@A+AUTHORS+'','' FROM ARTICLES WHERE ID IN ('+@ARTICLES+')'EXEC SP_EXECUTESQL @SQL,N'@A NVARCHAR(50) OUT',@AUTHORS OUTIF(LEN(@AUTHORS)>0)BEGINSET @AUTHORS=SUBSTRING(@AUTHORS,0,LEN(@AUTHORS))SET @SQL = 'SELECT ID,AUTHORNAME FROM AUTHORS WHERE ID IN ('+@AUTHORS+')'EXEC(@SQL)ENDGOEXEC GETBOOKAUTHORSBYID 1

侃侃无极

你最终要查询的结果是什么?
随时随地看视频慕课网APP

相关分类

SQL Server
我要回答