問題最終要求的結果是這樣的
是不是很簡單?
然而,資料庫是這樣式的
#忽略續借操作,只專注於借書、還書操作。
就是說同一張表,同一本書,既可以存借書,也可以存歸還,而且同一本書還可能藉出或歸還多次。
其他屬性好說,比較麻煩的就是這個歸還時間,同一本書,緊跟著借書操作的還書操作,才是它的歸還時間。
解決方案是這樣的:
把借出操作記為A表,歸還操作記為B表:其中A表22行,B表19行
連接條件應為藏書的編號和讀者的id ,連接的結果為58行。由於資料中,同一本書名稱有好幾個編號,我把書名給去掉了,連接的結果是這樣的
可以看出如果上的記錄框圖框出來的就是問題的所在!框圖框出來的都是同一筆借書記錄,它跟每一筆的還書記錄連結。從記錄裡可以看出,我讓這個人借了六次同一本書,做了六次的連結!
以下規則可以幫助我們查詢出正確的結果
1)同一組借還操作,借操作一定在還操作之前
##2)排除掉借操作時間>還操作的時間的記錄之後,最早的還書時間,就是這個人,這本書的還書時間最終結果是這樣的 最終SQL程式碼是這樣的select A.*,min(B.操作时间) 还书时间 from aleft join bon a.书籍的典藏编号 = b.书籍的典藏编号 and a.读者id = b.读者id and a.操作时间<b.操作时间group by a.书籍的典藏编号,a.操作名称,a.操作时间,a.读者id
以上是一個關於資料庫的聯合查詢的實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!