Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 多次提供相同主键值时获取唯一搜索数据_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 多次提供相同主键值时获取唯一搜索数据

Sql 多次提供相同主键值时获取唯一搜索数据,sql,sql-server,tsql,Sql,Sql Server,Tsql,让我展示一下表的结构 书桌 DECLARE @Book TABLE (BookID INT, BookName VARCHAR(30)) INSERT INTO @Book (BookID, BookName) SELECT '1', 'Art of Programming Contest' UNION ALL SELECT '2', 'Programming in C' UNION ALL SELECT '3', 'Programming in C++' --SELECT *

让我展示一下表的结构

书桌

DECLARE @Book TABLE (BookID INT, BookName VARCHAR(30))

INSERT INTO @Book
    (BookID, BookName)
SELECT '1', 'Art of Programming Contest' UNION ALL  
SELECT '2', 'Programming in C' UNION ALL
SELECT '3', 'Programming in C++'

--SELECT * FROM @Book
图书作者表

DECLARE @BookAuthors TABLE (BookID INT, AuthorID INT)

INSERT INTO @BookAuthors
    (BookID, AuthorID)
SELECT '1', '1' UNION ALL
SELECT '1', '2' UNION ALL
SELECT '2', '1' UNION ALL
SELECT '2', '3' UNION ALL
SELECT '3', '2' UNION ALL
SELECT '3', '4'

--SELECT * FROM @BookAuthors
图书分类表

DECLARE @BookCategories TABLE (BookID INT, CategoryID INT)

INSERT INTO @BookCategories
    (BookID, CategoryID)
SELECT '1', '1' UNION ALL
SELECT '1', '2' UNION ALL
SELECT '2', '1' UNION ALL
SELECT '2', '3' UNION ALL
SELECT '3', '2' UNION ALL
SELECT '3', '4'

--SELECT * FROM @BookCategories
通过使用这些表,我想按
BookID
AuthorID
CategoryID
搜索书籍;对于
AuthorID
CategoryID
搜索,我需要分别加入
BookAuthors
BookCategories
表。但是当我尝试通过
AuthorId
搜索时,结果多次给出相同的
BookId

查询

SELECT BK.BookID, BA.AuthorID, BC.CategoryID 
FROM @Book BK
LEFT JOIN @BookAuthors BA ON BA.BookID = BK.BookID
LEFT JOIN @BookCategories BC ON BC.BookID = BK.BookID
WHERE BA.AuthorID = 1
结果

BookID  ----- AuthorID ----- CategoryID 
   1             1               1
   1             1               2
   2             1               1
   2             1               3
我认为,到目前为止,它是好的;现在,我想生成如下结果:

BookID  ----- AuthorIDs ----- CategoryIDs
   1             1,2             1,2
   2             1,3             1,3

有什么想法吗?

我不知道你为什么希望结果像这样输出,我认为这不是一个好主意

但是你可以用这个

rextester演示:

返回:

+--------+-----------+-------------+
| BookId | AuthorIds | CategoryIds |
+--------+-----------+-------------+
|      1 | 1,2       | 1,2         |
|      2 | 1,3       | 1,3         |
+--------+-----------+-------------+

可能与我相同的副本,+1:)
+--------+-----------+-------------+
| BookId | AuthorIds | CategoryIds |
+--------+-----------+-------------+
|      1 | 1,2       | 1,2         |
|      2 | 1,3       | 1,3         |
+--------+-----------+-------------+