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

ServiceNow - how to write a select query retrieving values from 2 tables

我是 ServiceNow 的新手,但我知道 SQL 我无法在他们的官方网站和 google 上找到如此简单的 ServiceNow 查询示例是没有意义的. JOIN 有什么方法或者只是检查 table 1 中的 X 字段是否等于 table2 中的 Y 字段?

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

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

SELECT u.* from users u, companies c
WHERE u.company_name = c.company_name and c.city = 'London'

或加入:

SELECT u.* from users u
LEFT JOIN companies c on u.company_name = c.company_name
WHERE c.city = 'London'

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

参考字段会为您处理。

如果您在 ServiceNow 中为用户 (sys_user) 和公司 (core_company) 使用 out-of-box 表,则它们通过用户 (sys_user.company).

使用引用字段(本质上是外键),您可以使用 dot-walking 通过引用字段查询以查询引用记录上的字段。 用于检索位于伦敦的公司中的所有用户的 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);
}

您可以通过编码的 URLs:

查询来做同样的事情
yourinstance.service-now.com/sys_user_list.do?sysparm_query=company.city=London

GlideRecord 查询或编码的 URL 最终会在您要查找的联接的幕后生成 SQL(您可以激活 Debug SQL 以管理员身份调试会话以查看生成的 sql):

SELECT ... 
FROM  sys_user LEFT JOIN 
      core_company ON sys_user.company = core_company.sys_id 
WHERE core_company.city = 'London'

现在,您可能实际上并未使用这些 OOB 表,但您尝试使用联接查询的关系将通过类似配置的参考字段得到解决

报告可以帮助您在 ServiceNow 中查看数据库:

http://wiki.servicenow.com/index.php?title=Database_Views#gsc.tab=0

数据库视图定义了 table 用于报告目的的连接。

我只是想在上面的答案中添加一些内容(我会举个例子)。我将使用编码查询,它比 addQuery() 更安全。

var gr=new GlideRecord('users');//Creating object
gr.addEncodedQuery("Paste query after creating from query builder");
gr.query();//Executing query
while(gr.next())
{
  gs.addInfoMessage("User=" + gr.user_name);
  gs.addInfoMessage("Company Name="  + gr.company.name);
  gs.addInfoMessage("Company Address=" + gr.company.street);
  gr.addInfoMessage("Company City=" + gr.company.city);  
}