【发布时间】:2022-01-11 00:51:00
【问题描述】:
我希望有人可以帮助我。案例:
我有一张表 COMPANY_ACCESS 包含这些列:
ID NUMBER,
COMPANY_ID NUMBER,
AREA_ID NUMBER,
TEAM_ID NUMBER,
CAN_ACCESS BOOLEAN
我有我的查询(不起作用):
SELECT *
FROM COMPANY_ACCESS ca
WHERE
ca.CAN_ACCESS = true
AND ((ca.COMPANY_ID = ?1 AND ca.AREA_ID = ?2 AND ca.TEAM_ID = ?3)
OR (ca.COMPANY_ID = ?1 AND ca.AREA_ID = ?2 AND ca.TEAM_ID IS NULL)
OR (ca.COMPANY_ID = ?1 AND ca.AREA_ID IS NULL AND ca.TEAM_ID IS NULL))
我在这里的意图是什么。从更具体的访问(使用所有参数)到不太具体的访问。如果我在第一个条件下有一个寄存器:
(COMPANY_ID = ?1 AND AREA_ID = ?2 AND TEAM_ID = ?3)
我不需要检查其他的,只返回这个寄存器。如果我没有。我将在没有 TEAM_ID 的情况下进行检查(没有 TEAM_ID 的访问对 AREA_ID 内的所有团队都有效)。但是,如果我执行此查询,我会在第一个条件、第二个条件和第三个条件中收到寄存器。这不是我的本意。如果我在第一个条件(更具体)中找到一个,我不需要其他人只返回这个寄存器。如果我之前没有找到任何条件,我只会检查第二个和第三个条件。
有人可以帮我吗?
【问题讨论】:
-
澄清一下,绑定变量是可选传入的吗?意思是,如果你只传入 company_id,它只会返回对公司的访问权限?还是将所有参数都传入,并且您想返回与任何条件匹配的所有内容?
-
所有参数都被传递。使用所有这些参数,我将检查更具体到不太具体的@Nick