我有以下SQL语句,它使我不能从表tblscr_role
匹配,但我想找出与NOT IN CLAUSE.9('ROLE1','ROLE2','ROLE3','ROLE4')
中的值集值不匹配的内容。我该怎么做?
以下是我的SQL示例:
select role_name
from tblscr_role
where requestid = 9681
and role NOT IN ('ROLE1','ROLE2','ROLE3','ROLE4')
答案 0 :(得分:0)
也许你是在追求这样的事情:SQL Fiddle
我们使用外部联接从tblsrc_role获取结果,并为要匹配的角色创建内联视图,然后以两种方式查看角色tblsrc_role中的所有角色不在角色列表中,角色中的所有角色都不在tblsrc_role然后我们将这些结果结合在一起......
通常可以通过FULL OUTER JOIN完成;但我不相信mySQL支持它们,因此左右和联合模拟一个完整的外连接。
Select S1.role, B.Role, S1.RequestID
from tblSrc_role S1
LEFT JOIN
(
SELECT 'ROLE1' as role UNION ALL
SELECT 'ROLE2' UNION ALL
SELECT 'ROLE3' UNION ALL
SELECT 'ROLE4') B
on S1.Role = b.Role
WHERE S1.RequestID = 9681
UNION
Select S1.Role, B.role, S1.RequestID
from tblSrc_role S1
RIGHT JOIN
( SELECT 'ROLE1' as role UNION ALL
SELECT 'ROLE2' UNION ALL
SELECT 'ROLE3' UNION ALL
SELECT 'ROLE4') B
on S1.Role = b.Role
and S1.RequestID = 9681
如果您想查找列表中哪些不在系统中:
Select S1.Role, B.role, S1.RequestID
from tblSrc_role S1
RIGHT JOIN
( SELECT 'ROLE1' as role UNION ALL
SELECT 'ROLE2' UNION ALL
SELECT 'ROLE3' UNION ALL
SELECT 'ROLE4') B
on S1.Role = b.Role
where s1.requestID is null
您遇到的问题是您要返回的数据未存储在数据库中,因此无法返回不存在的数据。通过创建内联视图,传入角色,系统可以返回不在现有集中的值。 B.Role将包含不在系统S1中的角色列表。对于那些不存在的角色,SR.Role和S1.RequestID将为空。
虽然您可以返回B.Role来获取不存在的角色。