我正在创建一个查询,当管理员用户使用它时,与普通用户使用它时(在报告环境中)相比,该查询的行为有所不同。
当管理员查看时,我希望报告适用于所有用户。当普通用户使用它时,我希望查询仅查看在当前用户下工作的用户。
我正在尝试制作 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))
)
(请想象 currentUserAdmin
和 currentUserID
是传递给包含报表查询的存储过程的参数,而 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/