Не знаю, как объединить две таблицы MySQL - PullRequest
2 голосов
/ 06 марта 2012

Я новичок в SQL-запросах.У меня проблема с запросом.

У меня есть таблицы книг:

+----+-------+--------+-----------+
| id | title | author | publisher |
+----+-------+--------+-----------+
|  1 | Book1 |      1 |         1 |
|  2 | Book2 |      1 |         2 |
|  3 | Book3 |      2 |         1 |
|  4 | Book4 |      2 |         2 |
|  5 | Book5 |      2 |         3 |
+----+-------+--------+-----------+

И у меня есть еще одна таблица, в которой содержатся копии книг с заданным book_id.

+----+---------+
| id | book_id |
+----+---------+
|  1 |       1 |
|  2 |       1 |
|  3 |       1 |
|  4 |       2 |
|  5 |       2 |
|  6 |       3 |
|  7 |       4 |
|  8 |       4 |
|  9 |       5 |
+----+---------+

Все, что мне нужно, это объединить эти две таблицы в одну, чтобы отсортировать таблицу по количеству экземпляров книги.

Я нашел решение, чтобы отсортировать таблицу по количеству копий книги:

select book_copies.book_id, count(*) total_count 
from book_copies 
group by book_id 
having count(*) > 0 
order by count(*) desc;

+---------+-------------+
| book_id | total_count |
+---------+-------------+
|       1 |           3 |
|       2 |           2 |
|       4 |           2 |
|       3 |           1 |
|       5 |           1 |
+---------+-------------+

Теперь я не знаю, как их объединить.

Я пробовал вот так:

select books.title from books 
left join 
(select book_copies.book_id, count(*) total_count 
from book_copies 
group by book_id 
having count(*) > 0 
order by count(*) desc) 
as total_table on books.id = total_table.book_id;

Но все, что я получил, это:

+-------+
| title |
+-------+
| Book1 |
| Book2 |
| Book3 |
| Book4 |
| Book5 |
+-------+

Не могли бы вы помочь мне, пожалуйста?

РЕДАКТИРОВАТЬ: объединяя, я имел в виду что-то вроде этого:

+-------+--------+-----------+-----+
| title | author | publisher | tot |
+-------+--------+-----------+-----+
| Book1 |      1 |         1 |   3 |
| Book2 |      1 |         2 |   2 |
| Book4 |      2 |         2 |   2 |
| Book3 |      2 |         1 |   1 |
+-------+--------+-----------+-----+

Большое спасибо @Marco за ответ!

Дмитрий

1 Ответ

2 голосов
/ 06 марта 2012

Я думаю, вы могли бы попробовать:

SELECT b.title, b.author, b.publisher, COUNT(bc.book_id) AS tot
FROM books b LEFT JOIN  book_copies bc
    ON b.id = bc.book_id
GROUP BY b.id

РЕДАКТИРОВАНИЕ:
Если вы хотите сортировать, вы можете попробовать

SELECT * FROM
  (SELECT b.title, b.author, b.publisher, COUNT(bc.book_id) AS tot
    FROM books b LEFT JOIN  book_copies bc
        ON b.id = bc.book_id
    GROUP BY b.id) g
ORDER BY g.tot DESC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...