[英]Problems with combining 2 tables with Left Join
我將盡力解釋這個問題。 我有兩個表“ users1213”,它是玩家表和“ Loioperiodes”表。 現在,我想立即通過sql查詢獲取目前在俱樂部的球員列表。 如果他們借給另一家具樂部,則不必在名單上。 俱樂部也有可能借出一名球員,因此這些球員也必須列入名單。 所以我現在有這個(俱樂部的ID為“ 1”,球隊的ID也為“ 1”):
SELECT users1213.id, surname, name, team, club, loanclub
FROM users1213
LEFT JOIN loanperiode ON users1213.id = loanperiode.player
WHERE users1213.status = 'player'
AND (
(
users1213.club != '1'
AND loanperiode.loanclub = '1'
AND loanperiode.begin <= '2013-02-03'
AND loanperiode.end >= '2013-02-03'
AND (
uitleenperiodes.team_id = '1'
)
)
OR (
users1213.club = '1'
AND users1213.team = '1'
AND (
loanperiode.loanclub IS NULL
OR (
loanperiode.loanclub IS NOT NULL
AND (
loanperiode.begin < '2013-02-03'
AND loanperiode.end < '2013-02-03'
)
OR (
uitleenperiodes.begin > '2013-02-03'
AND uitleenperiodes.end > '2013-02-03'
)
)
)
)
)
GROUP BY users1213.id
ORDER BY name
LIMIT 0 , 30
通過此查詢,我得到了不錯的結果,但是當有人獲得2個借貸期時,有1個問題。 例如,PLAYER1現在借給了CLUB A,因此他可能沒有列出。 但是,當PLAYER1也有一個已到期的借貸期限時,到CLUB B時,PLAYER1將因LEFT JOIN而被列出。 是否有解決方案可以通過查詢解決此問題,或者在運行陣列時是否必須在事后檢查?
非常感謝!
SELECT users1213.id, surname, name, team, club, loanclub
FROM users1213
LEFT JOIN loanperiode ON users1213.id = loanperiode.player
AND '2013-02-03' BETWEEN loanperiode.begin AND loanperiode.end
WHERE
loanperiode.loanclub = '1'
OR (loanperiode.loanclub IS NULL -- I suppose this happens only when there is no loan between those dates so nothing LEFT JOINed
AND users1213.club = '1')
ORDER BY name
此示例假設用戶一次只能獲得一筆貸款(是的,他可以在歷史記錄中擁有更多的貸款,但是只有一筆在今天之前開始,並在將來結束)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.