Може ли някой да ми помогне да реша тази подзаявка в mysql?

***Правила: --- Не използвайте свързване от какъвто и да е вид и не използвайте корелирана подзаявка. --- Не използвайте съединение със запетая. --- Ако използвате присъединяване, няма да получите точки за тази задача. Клаузата From ще препраща само към една таблица. --- Не използвайте променлива.

***Това е моят проблем: Покажете идентификатора и заглавието на книгата за всички книги, които някой е поръчал и книгата е както SQL книга, така и книга с база данни. Използвайте Topic_id за филтриране за DB и SQL. Сортиране по book_id.

***Моят отговор:

 select book_id, title
  From a_bkinfo.books
  Where book_id IN
    (Select book_id
     From a_bkinfo.book_topics
     Where topic_id = 'DB')
 And book_id in
    (Select book_id
     From a_bkinfo.book_topics
     Where topic_id = 'SQL')
     order by book_id; 

Получих -2 за този проблем. Отговорът на моите учители: -2 * не е проверил дали тази книга е поръчана.

***Ето съответните таблици.* Таблици:

 ---- create order_details ------
 create  table   a_bkorders.order_details (
 order_id          integer          not null 
, order_line        integer          not null 
, book_id           integer          not null 
, quantity          integer          not null 
, order_price       numeric(6,2)     not null   
, constraint bk_orderline_pk         primary key (order_id, order_line)
, constraint bk_orderline_order_fk   foreign key (order_id) 
             references a_bkorders.order_headers(order_id) on delete cascade
, constraint bk_orderline_book_fk    foreign key (book_id )  
           references a_bkinfo.books(book_id)
, constraint bk_quantity_ck          check (quantity > 0) 
, constraint bk_ordprice_ck          check (order_price >= 0) 

)двигател = INNODB;

---- create book_topics ----
 create  table a_bkinfo.book_topics (
 book_id           integer          not null
, topic_id          varchar(5)       not null  
, constraint bk_book_topics_pk        primary key (book_id, topic_id)
, constraint bk_books_topics_fk      foreign key(topic_id) 
           references a_bkinfo.topics(topic_id)
, constraint bk_books_id_fk          foreign key(book_id) 
           references a_bkinfo.books(book_id)

)двигател = INNODB;

------ create books ------
create table a_bkinfo.books (
book_id           integer          not null
, title             varchar(75)      not null 
, publ_id           integer          null
, year_publd        integer          not null
, isbn              varchar(17)      null
, page_count        integer          null  
, list_price        numeric(6,2)     null  
, constraint bk_books_pk             primary key (book_id)
, constraint bk_books_publ_fk        foreign key(publ_id) 
           references a_bkinfo.publishers  (publ_id)
, constraint book_id_range           check (book_id > 1000)
, constraint bk_page_count_ck        check (page_count >= 0)
, constraint bk_price_ck             check (list_price >= 0)             
, constraint bk_books_year_ck        check (year_publd >= 1850)
)engine = INNODB;

person user2690891    schedule 03.11.2013    source източник


Отговори (1)


and book_id in 
    ( select d.book_id 
        from a_bkorders.order_details d
       where d.quantity > 0 
    )

Покажете идентификатора и заглавието на книгата(ите) с най-голям брой продажби; включват връзки. За тази заявка използвайте общото продадено количество. при определяне на продажбите на книгата

Без никакви JOIN операции или корелирани подзаявки, това ще върне посочения набор от резултати:

SELECT b.book_id
     , b.title
  FROM a_bkinfo.books b
 WHERE b.book_id IN
       ( 
         SELECT d.book_id
           FROM a_bkorders.order_details d
          GROUP BY d.book_id
         HAVING SUM(d.quantity) =
                (
                  SELECT MAX(t.tot_quantity)
                    FROM (  
                           SELECT s.book_id
                                , SUM(s.quantity) AS tot_quantity
                             FROM a_bkorders.order_details s
                            GROUP BY s.book_id
                         ) t
                )
       )

N.B. MySQL не налага CHECK ограничения.

person spencer7593    schedule 03.11.2013
comment
Това си мислех. Какво ще кажете за този проблем, използвайки същите таблици. Показване на идентификатора и заглавието на книгата(ите) с най-голям брой продажби; включват връзки. За тази заявка използвайте общото продадено количество. при определяне на продажбите на книга. - person user2690891; 03.11.2013