問題最終要求的結(jié)果是這樣的
?是不是很簡(jiǎn)單?
然而,數(shù)據(jù)庫(kù)是這樣式的
忽略續(xù)借操作,只關(guān)注借書、還書操作。
就是說同一張表,同一本書,既可以存借書,也可以存歸還,而且同一本書還可能借出或者歸還多次。
其他屬性好說,比較麻煩的就是這個(gè)歸還時(shí)間,同一本書,緊跟著借書操作的還書操作,才是它的歸還時(shí)間。
解決方案是這樣的:
把借出操作記為A表,歸還操作記為B表:其中A表22行,B表19行
?連接條件應(yīng)當(dāng)為藏書的編號(hào)和讀者的id ,連接的結(jié)果為58行。由于數(shù)據(jù)中,同一本書名有好幾個(gè)編號(hào),我把書名給去掉了,連接的結(jié)果是這樣的
可以看出如果上的記錄框圖框出來的就是問題的所在!框圖框出來的都是同一條借書記錄,它跟每一條的還書記錄連接。從記錄里可以看出,我讓這個(gè)人借了六次同一本書,做了六次的連接!
?以下規(guī)則可以幫助我們查詢出正確的結(jié)果
1)同一組借還操作,借操作一定在還操作之前
2)排除掉借操作時(shí)間>還操作的時(shí)間的記錄之后,最早的還書時(shí)間,就是這個(gè)人,這本書的還書時(shí)間
最終結(jié)果是這樣的
?最終SQL代碼是這樣的
select?A.*,min(B.操作時(shí)間)?還書時(shí)間?from?aleft?join? ?bon?a.書籍的典藏編號(hào)?=?b.書籍的典藏編號(hào)?and?a.讀者id?=?b.讀者id? and?a.操作時(shí)間<b.><p><img src="https://img.php.cn/upload/article/000/023/547/426f61aa9c856c5da0dc83174e9abb14-5.png" alt=""></p> <p>用的是左外連接,未歸還的還書時(shí)間當(dāng)然就是NULL啦。這樣,其他的子查詢、聯(lián)合、分頁(yè)都不是問題了。</p> <p><img alt=""></p></b.>
? 版權(quán)聲明
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載。
THE END