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_name
和 city
.
在 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);
}
我是 ServiceNow 的新手,但我知道 SQL
我无法在他们的官方网站和 google 上找到如此简单的 ServiceNow 查询示例是没有意义的.
JOIN
有什么方法或者只是检查 table 1 中的 X 字段是否等于 table2 中的 Y 字段?
示例:
我有 2 table 个公司和用户,我需要“SELECT
”所有在伦敦工作的用户。在用户 table 中,我有一个字段“company_name
”,在公司 table 中,我有字段 company_name
和 city
.
在 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);
}