SQL Query用于选择数据

时间:2016-05-19 17:36:09

标签: sql

我需要一些SQL查询帮助

我有3个表 - 人物,角色和作业

人员表包含识别人员的唯一号码 角色表包含​​2列,其中一列是主键唯一标识角色,第二列是角色名称。
赋值表包含2列,第一列是人的外键,第二列是角色的外键,基本上显示了哪个人属于哪个角色

为了简化,我们将数据视为:

人员表

enter image description here

角色表

enter image description here

作业表

enter image description here

现在,我需要编写一个查询,该查询只返回不属于以TEST_开头的角色的人。用户可以属于任意数量的角色,但我需要找到没有分配任何TEST_角色的用户。所以,使用我的例子,它应该只返回P3

看起来很简单,但我有点陷入困境,我无法弄清楚这一点!

非常感谢任何帮助

如果有帮助,我正在使用Oracle 11g后端。

2 个答案:

答案 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 )