Re: [SQL ] group的應用問題
※ 引述《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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
Database 近期熱門文章
PTT數位生活區 即時熱門文章