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

时间:2014-04-04 07:33:53

标签: 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条款来使用它。

如何使此查询有效?

1 个答案:

答案 0 :(得分:1)

为什么不加入这些表?

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