ServiceNow - 如何编写从2个表中检索值的选择查询

Nat*_*lie 5 database saas servicenow

我是ServiceNow的新手,但我知道SQL,我无法在他们的官方网站和谷歌上找到ServiceNow的简单查询示例.有没有办法JOIN或只是检查表1中的X字段是否等于表2中的Y字段?

示例:我有2个表,公司和用户,我需要" SELECT"所有在伦敦工作的用户.在用户表中我有一个字段' company_name',在公司表中我有字段company_namecity.

在SQL中,我可以通过简单的查询来解决它:

SELECT u.* from users u, companies c
WHERE u.company_name = c.company_name and c.city = 'London'
Run Code Online (Sandbox Code Playgroud)

或者加入:

SELECT u.* from users u
LEFT JOIN companies c on u.company_name = c.company_name
WHERE c.city = 'London'
Run Code Online (Sandbox Code Playgroud)

如何在ServiceNow中执行此操作?谢谢

Joe*_*oey 5

参考字段将为您处理此问题。

如果您在ServiceNow中为用户(sys_user)和公司(core_company)使用现成的表,则它们通过用户(sys_user.company)上的引用字段进行链接。

使用参考字段(本质上是外键),您可以使用点遍历查询参考字段,以查询参考记录中的字段。用于检索位于伦敦的公司中的所有用户的GlideRecord查询如下所示:

var user = new GlideRecord('sys_user');
user.addQuery('company.city', 'London');
user.query();
while (user.next()) {
  gs.info("User: " + user.user_name);
  gs.info("Company: "  + user.company.name);
  gs.info("Company Address: " + user.company.street);
  gs.info("Company City: " + user.company.city);
}
Run Code Online (Sandbox Code Playgroud)

您可以通过编码的URL查询执行相同的操作:

yourinstance.service-now.com/sys_user_list.do?sysparm_query=company.city=London
Run Code Online (Sandbox Code Playgroud)

无论是GlideRecord查询或编码的URL结束了,做的加入你正在寻找(你可以主动调试SQL调试会话以管理员查看生成的SQL)的引擎盖下产生的SQL:

SELECT ... 
FROM  sys_user LEFT JOIN 
      core_company ON sys_user.company = core_company.sys_id 
WHERE core_company.city = 'London'
Run Code Online (Sandbox Code Playgroud)

现在,您可能实际上并没有使用这些OOB表,但是可以使用类似配置的参考字段来解决您要使用联接查询的关系