Не получая результатов для выбора названия, имени издателя, типа и имен авторов для каждой книги, в которой есть два автора - PullRequest
0 голосов
/ 15 мая 2019

Я хочу получить подробную информацию о книге, в которой есть 2 автора, и для этого я написал следующий запрос:

SELECT BOOK.Book_Title
     , PUBLISHER.Publisher_Name
     , BOOK.Book_Type 
     , AUTHOR.Author_Last
     , AUTHOR.Author_First 
  FROM AUTHOR
     , WROTE
     , BOOK
     , PUBLISHER 
 WHERE AUTHOR.Author_Num = WROTE.Author_Num 
   AND WROTE.Book_Code = BOOK.Book_Code 
   AND BOOK.Publisher_Code = PUBLISHER.Publisher_Code
HAVING COUNT(WROTE.Book_Code) = 2;

Но когда я запускаю ее, я получаю 0 возвращаемых строк.Хотя данные доступны в таблицах и есть несколько строк, в которых есть 2 автора против одной книги.

Это схема, к которой я применяю запрос.

enter image description here

Ниже приведены данные, доступные в таблице WROTE, которая является отношением «многие ко многим» для таблицы BOOK и AUTHOR.

enter image description here

Скажите, пожалуйста, в чем проблема?

1 Ответ

0 голосов
/ 15 мая 2019

Ваш запрос неверен, поскольку в нем нет раздела GROUP BY, когда вы пытаетесь применить условие HAVING, которое предполагает наличие нескольких сгруппированных полей.

Я хотел бы использовать следующий запрос (MS SQL):

SELECT bk.Book_Title
     , pb.Publisher_Name
     , bk.Book_Type 
     , auth.Author_Last
     , auth.Author_First 
  FROM AUTHOR as auth
        join WROTE as wr on auth.Author_Num = wr.Author_Num
        join BOOK as bk on wr.Book_Code = bk.Book_Code
        join PUBLISHER as pb on bk.Publisher_Code = pb.Publisher_Code
where exists (SELECT 1 
                from  WROTE as wr_ex
                where wr_ex.Book_Code = wr.Book_Code
                group by wr_ex.Book_Code
                having count(1) = 2 )

Возможно, существует вариант с подзапросом, который выбирает Book_codes с двумя авторами в разделе FROM, к которому следует присоединиться, объединяя все остальные вещи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...