mysql - SQL left join on condition OR other 条件

标签 mysql sql join left-join

我有一个问题:

在查询中,我需要检查回复和交互(如果存在)。我想知道是哪个用户做出了回复或互动,并将其包含在我的行中。我目前有这个:

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/

相关文章:

javascript - 在一个函数中运行 2 个查询的正确 RESTful API 实践?

sql - 下一个 :jdbc How to allow multiple statements for SQL Server

sql - 多次选择同一行

sql - 如何在 SQL Server 2008 中使用 SQL 查询生成具有约束的表的创建脚本

mysql - 显示一个表中没有另一个 ID 号的值

MySQL 查询从一个表中选择不同的值并从另一个表中选择所有值

java - JDBC和mySQL将相关数据库表转换为对象

php - 如何从mysql中获取以前的记录

MySQL Cluster是NoSQL技术吗?

对给定数据在同一个表上进行 SQL 查询 JOIN