我是 ServiceNow 的新手,但我知道 SQL
并且我无法在他们的官方网站和谷歌上找到 ServiceNow 的如此简单的查询示例是没有意义的。
有什么方法可以JOIN
或只是检查表 1 中的 X 字段是否等于表 2 中的 Y 字段?
例子:
我有 2 个表,公司和用户,我需要“SELECT
”所有在伦敦工作的用户。在用户表中,我有一个字段“company_name
”,在公司表中,我有字段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
) 使用开箱即用的表,则它们通过引用字段链接用户(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,执行您正在寻找的连接(您可以以管理员身份激活 Debug SQL session 调试以查看生成的 sql ):
SELECT ...
FROM sys_user LEFT JOIN
core_company ON sys_user.company = core_company.sys_id
WHERE core_company.city = 'London'
现在,您可能实际上并没有使用这些 OOB 表,但是您尝试使用联接查询的关系将通过类似配置的引用字段来解决
关于database - ServiceNow - 如何编写从 2 个表中检索值的选择查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42329686/