0

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

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

我正在尝试制作 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子句一起使用。

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

4

1 回答 1

1

为什么不加入表格?

     SELECT dt.* ,user.id FROM datatable dt
     INNER JOIN user ON user.id = dt.user_id
     WHERE currentUserAdmin = 1
     Or working_under = currentUserID
于 2014-04-04T07:39:54.370 回答