一個關於資料庫的聯合查詢的實例

一个新手
發布: 2017-10-18 10:05:20
原創
1824 人瀏覽過

問題最終要求的結果是這樣的

 是不是很簡單?

然而,資料庫是這樣式的

#忽略續借操作,只專注於借書、還書操作。

就是說同一張表,同一本書,既可以存借書,也可以存歸還,而且同一本書還可能藉出或歸還多次。

其他屬性好說,比較麻煩的就是這個歸還時間,同一本書,緊跟著借書操作的還書操作,才是它的歸還時間。

解決方案是這樣的:

把借出操作記為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
登入後複製

用的是左外連接,未歸還的還書時間當然就是NULL啦。這樣,其他的子查詢、聯合、分頁都不是問題了。

以上是一個關於資料庫的聯合查詢的實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板