我有一個幫助人們銷售東西的服務數據庫。如果他們沒有交付出售,他們會受到處罰。我試圖提取每個用戶在應用特定懲罰時的有效列表數。需要幫助包裝頭圍繞連接
我有相當於下面的表格(及相關領域):
- 用戶(ID)
- 上市(ID,USER_ID,狀態)
- 交易(listing_id,seller_id)
- listing_history(ID,listing_status,DATE_CREATED)
- 懲罰(ID,TRANSACTION_ID,USER_ID,DATE_CREATED)
每次列表被修改時,listing_history表會保存一個條目,保存列表的新狀態記錄。
我的目標是結果列表中包含字段:penalty_id,以及懲罰用戶應用懲罰時的活動列表數量。
到目前爲止我有以下:
SELECT s1.penalty_id,
COUNT(s1.record_id) 'active_listings'
FROM (
SELECT penalty.id AS 'penalty_id',
listing_history.id AS 'record_id',
FROM user
JOIN penalty ON penalty.user_id = user.id
JOIN transaction ON transaction.id = penalty.transaction_id
JOIN listing_history ON listing_history.listing_id = listing.id
WHERE listing_history.date_created < penalty.date_created
AND listing_history.status = 0
) s1
GROUP BY s1.penalty_id
狀態= 0意味着列表是激活的(或該列表是活躍在記錄的創建時間)。我得到的結果與我的預期相似,但我擔心我可能會錯過某些內容,或者可能會錯誤地執行JOIN。這會得到你的認可嗎? (除明顯不使用別名外,清晰度問題)。
我希望你可能會錯過粘貼一個JOIN,它是'JOIN listing ON listing.id = transaction.listing_id'。交叉檢查一次,不管你在查詢中是否有這個連接。 – Viki888
@ viki888 - 爲什麼你認爲這個查詢需要一個額外的表?它看起來並不需要來自'LISTING'表的任何數據,如果關鍵結構如他所描述的那樣 –
@MarkAdelsberger在他的查詢中,他使用'listing'與'listing_history'和'listing'作爲'',''加入listing_history ON listing_history.listing_id = listing.id',但列表表格在連接中缺失。 – Viki888