作者相关书籍计数错误为什么以及如何解决?
count is wrong for author related book why and how to solve?
我在 SQL Server 2012 上工作,遇到一个问题:与作者相关的书籍计数错误。为什么与作者相关的书籍计数对于作者 Ahmed 是错误的?
当计算 author ahmed 时,我得到了一个不正确的结果,虽然它在书中有相关记录 table 作为 3 和 bookupdate 3 然后所有将是 6.
请问如何解决?
create table #books
(
BookId int,
BookName nvarchar(200),
AuthorId int
)
create table #booksUpdate
(
BookId int,
BookName nvarchar(200),
AuthorId int
)
insert into #booksUpdate
values (119, 'matlab', 1), (120, '3dmax', 1), (121, 'c', 1)
create table #Authors
(
AuthorId int,
AuthorName nvarchar(200)
)
insert into #Authors
values (1, 'Ahmed'), (2, 'Mohamed'), (3, 'Eslam')
insert into #books
values (122, 'c#', 1), (233, 'Java', 1),
(555, 'c++', 1), (666, 'photoshop', 2),
(777, 'asp.net', 2), (888, 'python', 2)
select
a.authorName,
count(b.BookName) as countBooks,
count(bu.BookName) as countBooksUpdate,
(count(bu.BookName) + count(b.BookName)) as Total
from
#Authors a
left join
#books b on a.AuthorId = b.AuthorId
left join
#booksUpdate bu on a.AuthorId = bu.AuthorId
group by
a.authorName
输出:
authorName countBooks countBooksUpdate Total
--------------------------------------------------
Ahmed 9 9 18
Eslam 0 0 0
Mohamed 3 0 3
作者 Ahmed
的结果错误。
应该是
authorName countBooks countBooksUpdate Total
-------------------------------------------------
Ahmed 3 3 6
如何将查询修正为 return 正确的结果?
预期结果是
authorName countBooks countBooksUpdate Total
-------------------------------------------------
Ahmed 3 3 6
Eslam 0 0 0
Mohamed 3 0 3
这行得通。它缺少 #books 和 #booksUpdate
之间 BookId 的连接
select a.authorName,count(b.BookName) as countBooks,
count(bu.BookName) as countBooksUpdate,
(count(bu.BookName) + count(b.BookName)) as Total
from #Authors a
left join #books b on a.AuthorId=b.AuthorId
left join #booksUpdate bu on a.AuthorId=bu.AuthorId
and b.BookId=bu.BookId
group by a.authorName;
结果
authorName countBooks countBooksUpdate Total
Ahmed 3 0 3
Eslam 0 0 0
Mohamed 3 0 3
#booksUpdate table 中的 BookId 与#books table 中的任何一个都不匹配。没有 BookId 上的连接,查询正在执行交叉连接。
假设将#booksUpdate 中的 3 行更改为匹配 Ahmed 的 3 行。我在这里更改问题中发布的数据。
drop table if exists #booksUpdate;
go
create table #booksUpdate
(
BookId int,
BookName nvarchar(200),
AuthorId int
)
insert into #booksUpdate
values
(122,'matlab',1),
(233,'3dmax',1),
(555,'c',1)
那么结果如下:
authorName countBooks countBooksUpdate Total
Ahmed 3 3 6
Eslam 0 0 0
Mohamed 3 0 3
我在 SQL Server 2012 上工作,遇到一个问题:与作者相关的书籍计数错误。为什么与作者相关的书籍计数对于作者 Ahmed 是错误的?
当计算 author ahmed 时,我得到了一个不正确的结果,虽然它在书中有相关记录 table 作为 3 和 bookupdate 3 然后所有将是 6.
请问如何解决?
create table #books
(
BookId int,
BookName nvarchar(200),
AuthorId int
)
create table #booksUpdate
(
BookId int,
BookName nvarchar(200),
AuthorId int
)
insert into #booksUpdate
values (119, 'matlab', 1), (120, '3dmax', 1), (121, 'c', 1)
create table #Authors
(
AuthorId int,
AuthorName nvarchar(200)
)
insert into #Authors
values (1, 'Ahmed'), (2, 'Mohamed'), (3, 'Eslam')
insert into #books
values (122, 'c#', 1), (233, 'Java', 1),
(555, 'c++', 1), (666, 'photoshop', 2),
(777, 'asp.net', 2), (888, 'python', 2)
select
a.authorName,
count(b.BookName) as countBooks,
count(bu.BookName) as countBooksUpdate,
(count(bu.BookName) + count(b.BookName)) as Total
from
#Authors a
left join
#books b on a.AuthorId = b.AuthorId
left join
#booksUpdate bu on a.AuthorId = bu.AuthorId
group by
a.authorName
输出:
authorName countBooks countBooksUpdate Total
--------------------------------------------------
Ahmed 9 9 18
Eslam 0 0 0
Mohamed 3 0 3
作者 Ahmed
的结果错误。
应该是
authorName countBooks countBooksUpdate Total
-------------------------------------------------
Ahmed 3 3 6
如何将查询修正为 return 正确的结果?
预期结果是
authorName countBooks countBooksUpdate Total
-------------------------------------------------
Ahmed 3 3 6
Eslam 0 0 0
Mohamed 3 0 3
这行得通。它缺少 #books 和 #booksUpdate
之间 BookId 的连接select a.authorName,count(b.BookName) as countBooks,
count(bu.BookName) as countBooksUpdate,
(count(bu.BookName) + count(b.BookName)) as Total
from #Authors a
left join #books b on a.AuthorId=b.AuthorId
left join #booksUpdate bu on a.AuthorId=bu.AuthorId
and b.BookId=bu.BookId
group by a.authorName;
结果
authorName countBooks countBooksUpdate Total
Ahmed 3 0 3
Eslam 0 0 0
Mohamed 3 0 3
#booksUpdate table 中的 BookId 与#books table 中的任何一个都不匹配。没有 BookId 上的连接,查询正在执行交叉连接。
假设将#booksUpdate 中的 3 行更改为匹配 Ahmed 的 3 行。我在这里更改问题中发布的数据。
drop table if exists #booksUpdate;
go
create table #booksUpdate
(
BookId int,
BookName nvarchar(200),
AuthorId int
)
insert into #booksUpdate
values
(122,'matlab',1),
(233,'3dmax',1),
(555,'c',1)
那么结果如下:
authorName countBooks countBooksUpdate Total
Ahmed 3 3 6
Eslam 0 0 0
Mohamed 3 0 3