我需要一些SQL查询帮助
我有3个表 - 人物,角色和作业
人员表包含识别人员的唯一号码
角色表包含2列,其中一列是主键唯一标识角色,第二列是角色名称。
赋值表包含2列,第一列是人的外键,第二列是角色的外键,基本上显示了哪个人属于哪个角色
为了简化,我们将数据视为:
人员表
角色表
作业表
现在,我需要编写一个查询,该查询只返回不属于以TEST_开头的角色的人。用户可以属于任意数量的角色,但我需要找到没有分配任何TEST_角色的用户。所以,使用我的例子,它应该只返回P3
看起来很简单,但我有点陷入困境,我无法弄清楚这一点!
非常感谢任何帮助
如果有帮助,我正在使用Oracle 11g后端。
答案 0 :(得分:2)
加入表格然后使用不喜欢。
SELECT a.FK_PersonID
FROM Assignment a
JOIN Roles r
ON r.RoleID = a.FK_RoleID
WHERE r.RoleName NOT LIKE "TEST_%"
答案 1 :(得分:1)
使用not exists
。像这样:
SELECT p.personid
FROM person_table p
WHERE not exists ( SELECT 'any test role for person'
FROM assignment_table a INNER JOIN role_table r ON r.roleid = a.fk_roleid
WHERE r.role_name like 'Test\_%' escape '\'
AND a.fk_personid = p.person_id )