这是在Oracle 11g中 我有一个表:LOG,其中包含许多列,下面是2列:
ticketid
comments
我有另一个表APP_ACCESS,其中包含(以及其他列)
user_id
appl_id
env_id
ticketid
APP_ACCESS的user_id,appl_id和env_id是LOG表中comments列的一部分。无论这些部分存在于何处(全部三个),我都需要从LOG表中获取ticketid并更新APP_ACCESS。
我尝试的是下面的内容(我没有检索到ticketid本身,没有返回任何内容):
select L.ticketid from LOG L join APP_ACCESS U
on INSTR(L.COMMENTS, U.USER_ID) > 0 and INSTR(L.COMMENTS, U.APPL_ID) > 0
编辑#1 注释列中的示例数据(注意:这是一个单元格,即一列,一行数据):
ATTEMPTED: MANAGERCOMMENTS="TEST",AFTER: MANAGERCOMMENTS="TEST"
ATTEMPTED: JUSTIFICATION="TEST",AFTER: JUSTIFICATION="TEST"
ATTEMPTED: REQUESTORDIVISION="DOF",AFTER: REQUESTORDIVISION="DOF"
ATTEMPTED: USERSELECTED="VEXUSERTEST",AFTER: USERSELECTED="VEXUSERTEST"
ATTEMPTED: REQUESTTYPE="CHANGE ACCESS",AFTER: REQUESTTYPE="CHANGE ACCESS"
ATTEMPTED: REQUESTORREGION="WASHINGTON",AFTER: REQUESTORREGION="WASHINGTON"
ATTEMPTED: ENVIRONMENTSELECTED="DEVELOPMENT",AFTER: ENVIRONMENTSELECTED="DEVELOPMENT"
ATTEMPTED: REQUESTORCOMMENTS="TEST",AFTER: REQUESTORCOMMENTS="TEST"
ATTEMPTED: APPLICATIONSELECTED="TEST_APP",AFTER: APPLICATIONSELECTED="TEST_APP"
ATTEMPTED: REQUESTOR="PRTEST",AFTER: REQUESTOR="PRTEST"
ATTEMPTED: ADDEDACCESSLEVELS="DEFAULT ACCESS",AFTER: ADDEDACCESSLEVELS="DEFAULT ACCESS"
USERSELECTED =“之后的字符串与APP_ACCESS表中的USER_ID相同。 APPLICATIONSELECTED =“之后的字符串与APP_ACCESS表中的APPL_ID相同。类似于ENVIRONMENTSELECTED =”之后的字符串映射到APP_ACCESS表中的ENV_ID。
答案 0 :(得分:1)
Anoop,对于迟到的回复我很抱歉 - 几分钟前我没有看到你的更新帖子。
我不是100%确定完成的查询的外观,但是对于Log
和App_Access
表之间的比较,逻辑将如下所示:
INSTR(L.Comments, 'USERSELECTED="' || U.User_ID || '"') > 0 AND
INSTR(L.Comments, 'APPLICATIONSELECTED="' || U.Appl_ID || '"') > 0 AND
INSTR(L.Comments, 'ENVIRONMENTSELECTED="' || U.Env_ID || '"') > 0
根据您的需要,您可以在WHERE
子句中使用此功能,也可以将其用作JOIN
条件的一部分。我希望这足以让你前进。
答案 1 :(得分:0)
您的查询失败可能是因为APP_ACCESS表中的值被空格字符包围,或者因为这些值不是大写的。如果是这样,以下查询必须解决问题:
select L.ticketid from LOG L join APP_ACCESS U
on INSTR(L.COMMENTS, UPPER(TRIM(U.USER_ID))) > 0
and INSTR(L.COMMENTS, UPPER(TRIM(U.APPL_ID))) > 0
其他可能性:
缺少一些中间字母;所以,值类似于机器人不太匹配。
ticketid
列为null
!
...