1

私は2つのテーブルを持っています

BOOK(book_id, book_name)

COPY(copy_id, book_id, available(bool))

COPYテーブルに同じbook_idがあり、使用可能がtrueに設定されているすべてのコピーのbook_id、book_name、およびCOUNT(*)を表示するクエリが必要です。サンプルクエリ出力は次のようになります。

1, BookA, 2
2, BookB, 4
3, BookC, 0

したがって、BookAには2つのCOPYタプルがあり、使用可能はtrueに設定されています。これは私がこれまでに持っているものです、それは機能しません。

SELECT * FROM
(SELECT * FROM BOOK)book,
(SELECT book_id, COUNT(copy_id) FROM COPY)copy
WHERE book.book_id = copy.book_id;
4

2 に答える 2

2

ブール値はMySQLの1場合なのでtrue、合計できます

SELECT b.book_id, 
       b.book_name, 
       sum(c.available) as copy_count
FROM book b
left outer join copy c on c.book_id = b.book_id
group by b.book_id

SQLFiddleデモ

于 2012-12-01T10:03:39.853 に答える
0

別のバリエーションは次のとおりです。

SELECT b.book_id, 
       b.book_name, 
       count(c.available) as copy_count
FROM book b
left outer join copy c on c.book_id = b.book_id and c.available = 1
group by b.book_id

結合には利用できないブックの行が含まれないため、これはもう少し効率的です。したがって、処理する中間テーブルは小さくなります。

于 2012-12-01T10:32:12.740 に答える