我需要找到一个select查询,它允许我在KnowledgeArticle中找到包含在字符串KnowledgeArticle.关键词中的任何单词都包含在事件.描述中的记录。
我正在使用IT服务管理应用程序,并希望自动提供与事件记录描述相匹配的知识文章列表。我没有直接的权限来改变这个ITSM应用程序查询数据库的方式,它都是通过一系列GUI来管理的。
但是,我可以将ITSM应用程序连接到我在数据库中创建的视图,并从中筛选视图的结果。
因此,我面临的挑战是,我需要在视图中获得所有KnowledgeArticle记录的列表,每个事件记录复制一次,其中事件.描述中的任何单词都包含在KnowledgeArticle.关键词中。
这个查询本身将是非常荒谬的,并且将显示非常大的记录子集,但是,一旦将查询构建并设置为视图,我将能够配置该查询/视图应用程序,以将此查询/视图的结果筛选为当前的事件记录,为我提供我需要的数据(知识文章中的任何关键字都存在于事件中)。
希望这是有意义的,我不知道我能在比较子句中使用哪种操作符来提供知识文章记录的列表。
(如果您不熟悉IT服务管理术语,意外事件和KnowledgeArticle这两个词只是表名,那么它们所做的对于被问到的技术问题就不那么重要了)。
发布于 2017-11-20 22:09:47
像这样的东西可能会起作用,尽管我必须警告它看起来效率很低,特别是考虑到知识库类型数据库的预计大小。我同意另一个答案,这可能不是最好的处理任何不是数据质量/分析工具。
如果Oracle或任何使用管道连接的RDBMS:
SELECT
t1.col1,
t2.col1
FROM table1 t1
INNER JOIN table2 t2
ON t1.col1 LIKE '%' || t2.col2 || '%'如果SQL Server或任何使用+连接的RDBMS:
SELECT
t1.col1,
t2.col1
FROM table1 t1
INNER JOIN table2 t2
ON t1.col1 LIKE '%' + t2.col2 + '%'我只是在几个样本表上试了一下,它看起来很有效,如果你不需要它们匹配的话,你可以用左边代替内部。
编辑:您刚刚意识到,您要求在一个列中的任何单词包含在其他列中。这太难了。光标可能在那里起作用。
更新:根据关于在Server中使用STRING_SPLIT的注释,下面将从t1.col1中找到出现在t2.col1中的单词
SELECT
t1.col1,
t2.col1
FROM (
SELECT t1.col1, v.value AS word
FROM table1 t1
CROSS APPLY STRING_SPLIT(t.col1, ' ') AS v
) AS t1
INNER JOIN table2 t2
ON '%' + t1.word+ '%' LIKE t2.col2发布于 2017-11-20 18:50:59
我不知道您的项目的要求,但是根据您在这篇文章中提供的信息,这符合来自数据质量服务(DQS)的数据质量项目的资格:
发布于 2017-11-21 02:59:03
基于@肯塔基切内里的评论,我能够得出这一点,它显示了事件表中Description字段中包含的单词列表,这些单词也包含在KnowledgeArticle表的关键字字段(包含许多不同的单词)中。
我必须从这一点上改进这一点,但困难的部分已经结束了。完成后会更新。
SELECT t1.word, t2.Keywords
FROM ( SELECT t1.Description, v.value AS word FROM Incident t1
CROSS APPLY STRING_SPLIT(
Convert(varchar(max),t1.Description), ' '
) AS v ) AS t1
INNER JOIN KnowledgeArticle t2 ON t2.Keywords Like ('%' + t1.word+ '%')https://dba.stackexchange.com/questions/191343
复制相似问题