作者kewang (652公车)
看板Database
标题Re: [SQL ] group的应用问题
时间Mon Nov 28 00:05:19 2011
※ 引述《kewang (652公车)》之铭言:
: 使用DB:sqlite3
: 想产生的results:
: 每本书的第一个借书者,如果没有借书者就显示为无
: 大家好,我想产生results的table(黄色),可是我使用这一个SQL script之後,却发现我
: 的friends.name一直不会出现丁丁丁、甲甲甲,反而是出现乙乙乙、丙丙丙(绿色)
: 不知道我是哪个部分的写法有问题呢?
经过twoseven大大的指导之後,我总算了解要如何产生了,大致如下:
(1) 先将loans的book_id用grouping, 并且产生每本书借阅的最早时间
select book_id, min(created_time) as created_time from loans group by
book_id ---> 产生l_s
(2) 再将loans与l_s做inner join,条件当然是book_id以及created_time要相等,
到此为止,l_a就是我们所产生的最重要table,用来做books及friends的join用
select l.book_id, l.friend_id, l.created_time from loans inner join
l_s
on l.book_id = l_s.book_id and l.created_time = l_s.created_time ---> 产生l_a
(3) 将books left join l_a,然後再将结果做left join friends
select b.id, b.title, b.isbn, b.cover, f.id, f.name, l_a.created_time from
books b left join
l_a on b.id = l_a.book_id left join friends f on
f.id = l_a.friend_id;
完整的sql如下:
select b.id, b.title, b.isbn, b.cover, f.id, f.name, strftime('%s',
l_a.created_time) from books b left join(select l.book_id, l.friend_id,
l.created_time from loans l inner join(select book_id, min(created_time) as
created_time from loans group by book_id) l_s on l.book_id = l_s.book_id and
l.created_time = l_s.created_time) l_a on b.id = l_a.book_id left join
friends f on f.id = l_a.friend_id;
--
杂七杂八的kewang部落格
http://kewang.tw
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.134.3.53