带 IN 和 if-subquery 的 Mysql 查询不起作用

标签 mysql mysql-error-1242

我正在创建一个查询,当管理员用户使用它时,与普通用户使用它时(在报告环境中)相比,该查询的行为有所不同。

当管理员查看时,我希望报告适用于所有用户。当普通用户使用它时,我希望查询仅查看在当前用户下工作的用户。

我正在尝试制作 1 个报告,即 1 个查询,将这两个方面结合起来。我的猜测是这样的:

SELECT * FROM datatable dt WHERE dt.user_id IN (
    IF (currentUserAdmin = 1, (SELECT id FROM user), (SELECT id FROM user WHERE working_under = currentUserID))
)

(请想象 currentUserAdmincurrentUserID 是传递给包含报表查询的存储过程的参数,而 datatable 实际上是一些真实的表)

问题是 mysql 说“子查询返回超过 1 行”。好吧,我想说这就是整个想法,因为我试图将其与 IN 子句一起使用。

我该怎么做才能使这个查询工作?

最佳答案

为什么不加入表格?

     SELECT dt.* ,user.id FROM datatable dt
     INNER JOIN user ON user.id = dt.user_id
     WHERE currentUserAdmin = 1
     Or working_under = currentUserID

关于带 IN 和 if-subquery 的 Mysql 查询不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22856408/

相关文章:

mysql - 拉取 Access 日期范围并跳过假期

mysql - 在列的子选择中计数

c# - 使用 ON DUPLICATE KEY UPDATE 插入查询更新已存在的行

php - WHERE id IN 在 UPDATE 中不起作用

php - 更新另一个表中单个列的所有行

php - UTF-8贯穿始终

mysql - 安装 MySQL 服务器 8.0.14 失败

mysql - 在 INSERT INTO 语句 MySQL 中引用当前行

mysql - zend 适配器类的 fetchall 函数不起作用

mysql - 嵌套查询中的问题 Mysql问题