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 |
+--------+-----------+-------------+