[英]SQL left join on condition OR other condition
我有一個問題:
在查詢中,我需要檢查是否有答復和互動。 我想知道是哪個用戶做出了答復或互動,並將其包括在我的行中。 我目前有這個:
SELECT * FROM `alerts` a
LEFT JOIN `interactions` i ON a.alerts = i.alert_id
LEFT JOIN `reply` r ON a.alerts = r.alert_id
LEFT JOIN `users` u ON u.id = r.user_id OR i.user_id
WHERE (a.user_id = '0' AND r.user_id != '')
OR (a.user_id = '0' AND i.user_id != '')
除了與交互表返回重復的警報ID外,這多少返回了我所不想要的信息。第一個消息說警察在該警報上發布了交互,該警報為a.user_id 0,另一個則以用戶名正確返回。 有人能幫我嗎?
在您遇到的情況下,您需要發出警報:1.表reply
所引用的用戶2.表interactions
所引用的用戶
由於兩個用戶在您的查詢中都具有不同的角色,因此建議您使用以下查詢:
SELECT *
FROM alerts A
LEFT JOIN interactions I ON I.alert_id = A.alerts
LEFT JOIN users UI ON UI.id = I.user_id
LEFT JOIN reply R ON R.alert_id = A.alerts
LEFT JOIN users UR ON UR.id = R.user_id
WHERE A.user_id = '0'
這樣,您就可以在SELECT
語句中顯示所需的字段。
希望這會有所幫助。
在where子句中具有r和i用戶ID引用,將其從左聯接變為內部聯接。 將這些條件移到連接部分,然后為其中任何一個測試NOT NULL。
SELECT *
FROM `alerts` a
LEFT JOIN `interactions` i
ON a.alerts = i.alert_id
LEFT JOIN `reply` r
ON a.alerts = r.alert_id
AND r.user_id != ''
LEFT JOIN `users` u
ON ( u.id = r.user_id
OR u.id = i.user_id )
AND i.user_id != ''
WHERE
a.user_id = '0'
AND ( NOT r.user_id IS NULL
OR NOT i.user_id IS NULL )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.