Sql 两组oracle db数据。如何选择一组中的数据而不选择另一组中的数据,反之亦然

Sql 两组oracle db数据。如何选择一组中的数据而不选择另一组中的数据,反之亦然,sql,database,oracle,Sql,Database,Oracle,我有两个子查询,我得到工作 ( SELECT GLOBAL_USERS.ID AS USER_ID, GLOBAL_USERS.USER_ID AS USERNAME, GLOBAL_USERS.DEPARTMENT AS DEPARTMENT, GLOBAL_USERS.FIRST_NAME AS FIRSTNAME, GLOBAL_USERS.LAST_NAME AS LASTNAME, GLOBAL_USERS.TITLE AS TITLE, USER_

我有两个子查询,我得到工作

(

SELECT GLOBAL_USERS.ID AS USER_ID, GLOBAL_USERS.USER_ID AS USERNAME,
    GLOBAL_USERS.DEPARTMENT AS DEPARTMENT,
    GLOBAL_USERS.FIRST_NAME AS FIRSTNAME, GLOBAL_USERS.LAST_NAME AS LASTNAME, 
    GLOBAL_USERS.TITLE AS TITLE,
    USER_FIRST_ENTITLEMENTS.ENTITLEMENT_NAME AS ENTITLEMENTNAME, 
    USER_FIRST_ENTITLEMENTS.APPLICATION_NAME AS APPLICATIONNAME 
FROM GLOBAL_USERS
INNER JOIN USER_FIRST_ENTITLEMENTS 
ON GLOBAL_USERS.ID=USER_FIRST_ENTITLEMENTS.USER_ID AND 
    (USER_FIRST_ENTITLEMENTS.APPLICATION_NAME='MY APPLICATION NAME'
    AND USER_FIRST_ENTITLEMENTS.ENTITLEMENT_NAME LIKE '%\fis\%')
) join1



(
SELECT DISTINCT injoin1.ID,injoin2.APPLICATION_ROLE_ID, injoin2.NAME FROM
(
    SELECT GLOBAL_USERS.ID,USER_SECOND_ENTITLEMENTS.APPLICATION_ROLE_ID 
    FROM GLOBAL_USERS
    INNER JOIN USER_SECOND_ENTITLEMENTS
    ON GLOBAL_USERS.ID=USER_SECOND_ENTITLEMENTS.USER_ID
    ) injoin1,
    (
    SELECT USER_SECOND_ENTITLEMENTS.APPLICATION_ROLE_ID,SECOND_ENTITLEMENT_DEFINITIONS.NAME 
    FROM USER_SECOND_ENTITLEMENTS
    INNER JOIN SECOND_ENTITLEMENT_DEFINITIONS
    ON USER_SECOND_ENTITLEMENTS.APPLICATION_ROLE_ID=SECOND_ENTITLEMENT_DEFINITIONS.ID
    ) injoin2
    WHERE injoin1.APPLICATION_ROLE_ID=injoin2.APPLICATION_ROLE_ID 
) join2
本质上,我现在需要做的是查看每个join1.USER_ID的每个join1.authorizementname是否存在于join2.NAME中的同一个join2.ID中。如果它不存在,那么我需要有一行显示join1.USERNAME join1.DEPARTMENT、join1.FIRSTNAME、join1.LASTNAME、join1.TITLE、join1.authoritmentname、join1.APPLICATIONNAME

一、 同时,需要查看每个join2.ID的每个join2.NAME是否存在于join1.authoritmentname中的同一join1.USER_ID中

我有点迷茫如何做到这一点,但我相信它是与某种类型的加入

注意:比较join1.AuthenticationName和join2.NAME以及用户ID在join1.USER\u ID和join2.ID中

我不担心效率或速度,我只需要功能,所以一个简单的答案就足够了

如果你帮我做正则表达式的话,我会给你加分的。join2.NAME存储为它们自己,但是join1.authorizementname存储为“/fis/”我不确定如何对其进行过滤,因此如果有人能解释一下,这会很有帮助

提前谢谢

你调查过指挥部了吗?这就像一个联盟的倒数。它减去两个查询之间的相似性,因此结果集就是这两个查询之间的差异。听起来这正是你需要的。拿你的第一盘,减去第二盘

我认为下面的代码就是您描述的,但是您可能需要修改它以完全满足您的需要

SELECT 
    GLOBAL_USERS.ID AS USER_ID, 
    GLOBAL_USERS.USER_ID AS USERNAME,
    GLOBAL_USERS.DEPARTMENT AS DEPARTMENT,
    GLOBAL_USERS.FIRST_NAME AS FIRSTNAME, 
    GLOBAL_USERS.LAST_NAME AS LASTNAME, 
    GLOBAL_USERS.TITLE AS TITLE,
    USER_FIRST_ENTITLEMENTS.ENTITLEMENT_NAME AS ENTITLEMENTNAME, 
    USER_FIRST_ENTITLEMENTS.APPLICATION_NAME AS APPLICATIONNAME 
FROM GLOBAL_USERS
INNER JOIN USER_FIRST_ENTITLEMENTS 
    ON  GLOBAL_USERS.ID=USER_FIRST_ENTITLEMENTS.USER_ID 
    AND ( USER_FIRST_ENTITLEMENTS.APPLICATION_NAME='MY APPLICATION NAME'
          AND USER_FIRST_ENTITLEMENTS.ENTITLEMENT_NAME LIKE '%\fis\%')

MINUS

SELECT 
    GLOBAL_USERS.ID AS USER_ID, 
    GLOBAL_USERS.USER_ID AS USERNAME,
    GLOBAL_USERS.DEPARTMENT AS DEPARTMENT,
    GLOBAL_USERS.FIRST_NAME AS FIRSTNAME, 
    GLOBAL_USERS.LAST_NAME AS LASTNAME, 
    GLOBAL_USERS.TITLE AS TITLE,
    USER_SECOND_ENTITLEMENTS.ENTITLEMENT_NAME AS ENTITLEMENTNAME, 
    USER_SECOND_ENTITLEMENTS.APPLICATION_NAME AS APPLICATIONNAME 
FROM GLOBAL_USERS
INNER JOIN USER_SECOND_ENTITLEMENTS 
    ON  GLOBAL_USERS.ID=USER_SECOND_ENTITLEMENTS.USER_ID 
    AND ( USER_SECOND_ENTITLEMENTS.APPLICATION_NAME='MY APPLICATION NAME'
          AND USER_SECOND_ENTITLEMENTS.ENTITLEMENT_NAME LIKE '%\fis\%')
就正则表达式而言,
'%\/fis\/%'
应该起作用。您需要退出
'/'

命令吗?这就像一个联盟的倒数。它减去两个查询之间的相似性,因此结果集就是这两个查询之间的差异。听起来这正是你需要的。拿你的第一盘,减去第二盘

我认为下面的代码就是您描述的,但是您可能需要修改它以完全满足您的需要

SELECT 
    GLOBAL_USERS.ID AS USER_ID, 
    GLOBAL_USERS.USER_ID AS USERNAME,
    GLOBAL_USERS.DEPARTMENT AS DEPARTMENT,
    GLOBAL_USERS.FIRST_NAME AS FIRSTNAME, 
    GLOBAL_USERS.LAST_NAME AS LASTNAME, 
    GLOBAL_USERS.TITLE AS TITLE,
    USER_FIRST_ENTITLEMENTS.ENTITLEMENT_NAME AS ENTITLEMENTNAME, 
    USER_FIRST_ENTITLEMENTS.APPLICATION_NAME AS APPLICATIONNAME 
FROM GLOBAL_USERS
INNER JOIN USER_FIRST_ENTITLEMENTS 
    ON  GLOBAL_USERS.ID=USER_FIRST_ENTITLEMENTS.USER_ID 
    AND ( USER_FIRST_ENTITLEMENTS.APPLICATION_NAME='MY APPLICATION NAME'
          AND USER_FIRST_ENTITLEMENTS.ENTITLEMENT_NAME LIKE '%\fis\%')

MINUS

SELECT 
    GLOBAL_USERS.ID AS USER_ID, 
    GLOBAL_USERS.USER_ID AS USERNAME,
    GLOBAL_USERS.DEPARTMENT AS DEPARTMENT,
    GLOBAL_USERS.FIRST_NAME AS FIRSTNAME, 
    GLOBAL_USERS.LAST_NAME AS LASTNAME, 
    GLOBAL_USERS.TITLE AS TITLE,
    USER_SECOND_ENTITLEMENTS.ENTITLEMENT_NAME AS ENTITLEMENTNAME, 
    USER_SECOND_ENTITLEMENTS.APPLICATION_NAME AS APPLICATIONNAME 
FROM GLOBAL_USERS
INNER JOIN USER_SECOND_ENTITLEMENTS 
    ON  GLOBAL_USERS.ID=USER_SECOND_ENTITLEMENTS.USER_ID 
    AND ( USER_SECOND_ENTITLEMENTS.APPLICATION_NAME='MY APPLICATION NAME'
          AND USER_SECOND_ENTITLEMENTS.ENTITLEMENT_NAME LIKE '%\fis\%')

就正则表达式而言,
'%\/fis\/%'
应该起作用。您需要退出
“/”

谢谢您的提示。我要做些调查!就正则表达式而言,我的意思是,当我比较这两种权利时,比较就像“blah/blah/blah/fis/entitl3”=“entitl3”我需要在比较中过滤掉,你可以放在前面,但不想排除匹配项。谢谢你的提示。我要做些调查!就正则表达式而言,我的意思是,当我比较这两种权利时,比较就像“blah/blah/blah/fis/entitl3”=“entitl3”,我需要在比较中过滤掉,你可以放在前面,但不想排除匹配项。