Skip to content
Advertisement

Is there something wrong with this SQL query

I am new to SQL queries and trying to understand it a little better. Is this SQL query valid regarding the picture below The question I was given was:

“For each book authored (or co-authored) by “Stephen King”, retrieve the title and the number of copies owned by the librarybranch whose name is “Central”

SELECT Title
FROM BOOK
WHERE BookID = 
(
 SELECT BookID
 FROM BOOK_AUTHORS
 WHERE AuthorName = 'Stephen King'
)
AND
BookID = 
(
 SELECT BookID, No_Of_Copies
 FROM BOOK_COPIES
 WHERE BranchID =
 (
  SELECT BranchID
  FROM LIBRARY_BRANCH
  WHERE BranchName = 'Central'
 )
)

enter image description here

Advertisement

Answer

Please use below query, but the right approach is to use joins instead of multiple sub queries

Joins

SELECT B.Title
FROM BOOK B
inner join BOOK_AUTHORS BA
on (B.bookid = ba.bookid)
inner join BOOK_COPIES BC
on (B.bookid = BC.bookid)
inner join LIBRARY_BRANCH LB
on (BC.branchid = LB.branchid)
where B.AuthorName = 'Stephen King'
and LB.BranchName = 'Central';

Subquery

SELECT Title
FROM BOOK
WHERE BookID in
(
 SELECT BookID
 FROM BOOK_AUTHORS
 WHERE AuthorName = 'Stephen King'
)
AND
BookID in 
(
 SELECT BookID
 FROM BOOK_COPIES
 WHERE BranchID in
 (
  SELECT BranchID
  FROM LIBRARY_BRANCH
  WHERE BranchName = 'Central'
 )
);
User contributions licensed under: CC BY-SA
2 People found this is helpful
Advertisement