我有 2 张 table 。
用户(id,用户名)
和链接(id,usernameORid)
。
行示例: users{ [1,test] , [2,stack] }
和 links{ [1,overflow] , [2, 1] }
因此,表链接
可能包含表users
中的用户名或ID。正如您在示例中看到的,
链接
中的usernameORid
不得包含用户的id
或username
。
我希望你能理解我的例子。
现在,我有这个查询:
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
不是实际的 username
或 id
,则此查询不会从 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/