2012-12-01 59 views
1

我有兩個表MySQL的計數值作爲一列

BOOK(book_id, book_name) 

COPY(copy_id, book_id, available(bool)) 

我想有一個查詢,顯示book_id,BOOK_NAME,並與所有副本的COUNT(*) COPY表中有相同的book_id,其可用設置爲true。示例查詢輸出應該如下所示:

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

因此,BookA有兩個可用的COPY元組,設置爲true。這是我到目前爲止,它不起作用。

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

回答

2

由於布爾值1如果true在MySQL中,你可以總結起來

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 demo

+0

對於複製標識爲ID且唯一的情況的好查詢。 – Michael

+0

這一個不顯示我的第三種情況,其中BookC有0個可用的COUNT。 – user1795609

+0

它應該工作。請參閱[本演示](http://sqlfiddle.com/#!2/81ed2/1) –

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 

這是多一點因爲加入不包括效率e沒有書籍的行,所以它是一個較小的中間表來處理。