为什么这两个查询对 role
给出不同的结果?
RIGHT 结果(角色与用户正确关联):
SELECT
users.*,
activations.id AS activation
(SELECT
roles.name
FROM roles
INNER JOIN role_users ON roles.id = role_users.role_id
WHERE role_users.user_id = users.id
LIMIT 1) AS role
FROM users
LEFT JOIN activations ON users.id = activations.user_id
错误 结果(角色始终是 roles
表的第一条记录):
SELECT
users.*,
activations.id AS activation
(SELECT
roles.name
FROM roles
INNER JOIN role_users ON roles.id = role_users.role_id
INNER JOIN users ON users.id = role_users.user_id
LIMIT 1) AS role
FROM users
LEFT JOIN activations ON users.id = activations.user_id
我不能使用第一个查询(使用 WHERE role_users.user_id = users.id
),我必须使用第二个(使用“JOIN”):如何获得正确的结果?
谢谢
编辑:回答评论:
I can't use the first query
意思是,简而言之,我正在使用 Laravel Query Builder 构建它,表达式WHERE role_users.user_id = users.id
,在 Laravel Query Builder 中翻译成->where('role_users.user_id', '=', 'users.id')
不起作用,因为它的处理方式就好像它是WHERE role_users.user_id = 'users.id'
。 我可以使用 whereRaw() 但我想避免这种情况,并寻找更好的解决方案- 我没有构建数据库模式,但它来自 Cartalyst Sentinel;这是一个多对多的关系,但我注意每个用户只有一个角色,如果一个用户有多个角色,那么就选择第一个(因为有一个
ORDER BY roles.id
)
最佳答案
您使用的用户来自外部查询的第一个查询
SELECT
/
(SELECT
roles.name
FROM roles
INNER JOIN role_users ON roles.id = role_users.role_id
WHERE role_users.user_id = users.id
^^^^ -- external query user_id
LIMIT 1) AS role
FROM users --- you use this user, so each row has a different user_id
LEFT JOIN activations ON users.id = activations.user_id
第二个查询从用户表中选择第一个角色,并且每一行都相同。
关于mysql - 这 2 个 SQL 查询返回不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36481897/