我有一个问题:
在查询中,我需要检查回复和交互(如果存在)。我想知道是哪个用户做出了回复或互动,并将其包含在我的行中。我目前有这个:
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
语句中显示所需的字段。
希望这会有所帮助。
关于mysql - SQL left join on condition OR other 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26178136/