我剛剛開始研究其他人放在一起的MySQL數據庫,並且我正在嘗試清理它。我的問題有三個相關的表格 - 一張表格列出了拍賣,一張表格列出了每次拍賣中出售的拍賣品以及一張表格,列出了每個拍賣品的付款時間表。查找多表MySQL數據庫中的缺失行
拍賣表使用主鍵來標識每個拍賣,並且每個拍賣都有這個關鍵字來標識拍賣。同樣,每個批次都有一個不同的密鑰,每次付款都用於識別批次。每個拍賣應該至少有一個批次,每批應該至少有一個付款。沒有支付應附加到很多表格中沒有行的批次,也不應將批次附加到拍賣表格中沒有行的拍賣。我試圖找出一個查詢,這將允許我查找違反此規則的行 - 例如,在批次表中缺少大量或附加很多的額外付款。
目前我正在做一個數不同的查詢,它給了我在相關表中提到的拍賣數量,但如果數字不匹配,它不會幫助我找到哪些丟失。有沒有可用於查找缺少的行的查詢?
謝謝
或'不存在(選擇*從批次WHERE鍵= Auction.key)'。據我所知,它通常是完成反半連接的最佳方式。 'LEFT JOIN'選項通常是最差的。這是否適用於MySQL我不知道。值得在大型樣本數據集上進行三項試驗。 – MatBailie
我的印象是,查詢優化處理了這一點,Not In和Left join表現幾乎完全相同,並且not exists方法在某些情況下效率略低。更何況涉及索引。 rescource:http://explainextended.com/2009/09/18/not-in-vs-not-exists-vs-left-join-is-null-mysql/ –