前端時間,室友拿來一道關於mysql查詢的問題:
有3張表:
1,zd_product 產品表 zp_id主鍵(產品id) inputtime(產品發布時間)
2,zd_order訂單表 zp_id外鍵(產品id)zo_id主鍵(訂單id) zo_voer_time( 訂單完成時間)
3,zd_ord_pro產品訂單表 zo_id外鍵(訂單id)zp_id(產品id)
問:通過這3張表查找從產品發布到“一個月內““沒有”被賣出過的產品?
在這裡我也不說我們是如何討論的了,直接上思路:
1,先查找在這一月內被賣出去的產品id,查找出來的數據:data(所查表zd_order)
2,通過第一步查找出來的數據繼續查詢zd_order表,不過要加個not in (data)
3,通過前兩步,你已經查找出來沒被賣出的產品id了,接下來你想查什麼就查什麼。
語句:
復制代碼 代碼如下:
select * from zd_product a1 left join zd_ord_pro a3 on a1.zp_id=a3.zp_id where a1.zp_id in (select zp_id from zd_order where a1.zp_id not in (select zp_id from zd_order a2 where a2.zo_voer_time>a1.inputtime and a2.zo_voer_time<a1.inputtime+30))
該語句未驗證,如有錯誤,請自行修改。
提示:時間相加需轉換為時間戳。