mysql 用 on 条件连接 2 个表,保留一些值

标签 mysql join

我有 2 张 table 。

用户(id,用户名)链接(id,usernameORid)

行示例: users{ [1,test] , [2,stack] }links{ [1,overflow] , [2, 1] }

因此,表链接可能包含表users中的用户名或ID。正如您在示例中看到的, 链接中的usernameORid不得包含用户的idusername。 我希望你能理解我的例子。

现在,我有这个查询:

SELECT  l.usernameORid, u.username, u.id
FROM links l
LEFT JOIN users u 
    ON l.usernameORid= u.id
LEFT JOIN user_roles ur
    ON ur.userID = u.id
WHERE ur.roleID < 4
group by u.id

但是,如果 usernameORid 不是实际的 usernameid,则此查询不会从 links 返回行用户

在前面的示例中,不会返回行[1,overflow]。我也想要那一行。

我怎样才能做到这一点?

编辑:问题部分与

LEFT JOIN user_roles ur
ON ur.userID = u.id
WHERE ur.roleID < 4

但是,我怎样才能实现这一目标?

user_roles (id,userID,roleID)

最佳答案

更改您的最终WHERE条件为:

WHERE ur.roleID < 4 OR u.id IS NULL

这将允许它返回在users中没有匹配的行。 。通常是LEFT JOIN本身会执行此操作,但由于您要在该表上执行额外的连接,因此 WHERE子句正在过滤掉那些不匹配的行,因为它们没有 roleID .

关于mysql 用 on 条件连接 2 个表,保留一些值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26040232/

相关文章:

mysql - 错误 2013 MySQL 服务器 "system error: 104"

mysql - 我可以拥有一个自动从同一数据库中的 2 个或更多表获取数据的 MYSQL 表吗?

php - mysql中如何连接三个表?

SQL-Server 将 "USE"与 INNER JOINS 和 "UNION"一起使用

java - 如何在ubuntu中连接mysql和eclipseoxy

php - 单击 "Like"时,使用 ajax 异步更新 mysql 字段

mysql - 是否可以有一个空的 MySQL 数字字段?

mysql - LEFT JOIN 仅在右表为空时返回左表的第一行

sql - Postgres - 查询从多个表中选择字段作为列

php - 将各自的逗号分隔值插入各自的数据库字段