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”,我需要在比较中过滤掉,你可以放在前面,但不想排除匹配项。