mysql - 这 2 个 SQL 查询返回不同的结果

标签 mysql sql

为什么这两个查询对 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”):如何获得正确的结果?

谢谢

编辑:回答评论:

  1. 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() 但我想避免这种情况,并寻找更好的解决方案
  2. 我没有构建数据库模式,但它来自 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/

相关文章:

php - 如何从多个表中高效地sql查询子记录?

mysql - mysql 的 GROUP BY 或 DISTINCT 遇到困难

php - 用于搜索器的两个非关系表的 SQL 语句

php - mysql OR 查询与输出

sql - SQL Server 2005中的自动增量

java - Spring 数据 JPA nativeQuery order by 无效

php - 如何在 $_POST 上散列 SHA2?

javascript - 使用 javascript 显示某个套餐的值(value)(价格)

mysql - SQL查询列在强制转换为字段的位置未知

php - 在PHP中显示mysql表数据