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

时间:2017-02-19 16:21:26

标签: database saas servicenow

我是ServiceNow的新用户,但我知道SQL,我无法在他们的官方网站和谷歌上找到ServiceNow的简单查询示例。 有没有办法JOIN或只是检查表1中的X字段是否等于来自table2的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'

或加入:

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

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

3 个答案:

答案 0 :(得分:4)

参考字段可以为您处理。

如果您在ServiceNow中为用户(sys_user)和公司(core_company)使用现成的表格,则会通过用户的参考字段({{ 1}})。

使用引用字段(基本上是外键),您可以使用点走来查询引用字段以查询引用记录上的字段。 用于检索位于伦敦的公司中的所有用户的GlideRecord查询看起来像:

sys_user.company

通过编码URL查询可以做同样的事情:

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);
}

yourinstance.service-now.com/sys_user_list.do?sysparm_query=company.city=London 查询或编码后的URL最终会在您正在寻找的连接中生成SQL(您可以作为管理员激活Debug SQL会话调试以查看生成的sql) :

GlideRecord

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

答案 1 :(得分:1)

我只想在上面的答案中添加一些内容(我将举例说明)。我将使用encodedQuery,它比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);  
}

答案 2 :(得分:0)

报告可以帮助您在ServiceNow中使用数据库视图:

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

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