簡體   English   中英

用左聯接合並2個表的問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM