【问题标题】:ServiceNow - how to write a select query retrieving values from 2 tablesServiceNow - 如何编写从 2 个表中检索值的选择查询
【发布时间】:2017-07-08 20:30:06
【问题描述】:

我是 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'

或加入:

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

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

【问题讨论】:

    标签: database saas servicenow


    【解决方案1】:

    参考字段会为您处理。

    如果您在 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);
    }
    

    您也可以通过编码 URL 进行查询:

    yourinstance.service-now.com/sys_user_list.do?sysparm_query=company.city=London
    

    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'
    

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

        我只是想在上面的答案中添加一些东西(我会举个例子)。我将使用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);  
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-10-15
          • 1970-01-01
          • 1970-01-01
          • 2015-03-12
          • 1970-01-01
          • 2014-03-12
          相关资源
          最近更新 更多