我根据用户数据查询了搜索页面;也就是说,用户应该只能搜索其结果与他们自己的结果相似的其他用户。由于每个结果都在其各自的表中的自己的行中,因此我使用oracle的listagg()函数来生成用户记录列表。
有没有办法在两组记录之间搜索相似之处? 例如,像:
select <data> from (select listagg(data, ', ')...where userid='<whatever>')
where <data> in (select listagg(data, ', ')...where userid='<whatever>')
显然这是伪代码,但假设&#39; ...&#39;表示为简洁起见而省略的有效语法。同样简洁起见,我只包括一个例子;有几个领域我会过滤,但我认为它们应该或多或少都像这样。每当我尝试类似的东西时,我发现的是listagg函数以&#39; x,y,z&#39;的格式返回,而不是&#39; x&#39;,&#39; ; y&#39;,&#39; z&#39;,这导致查询(使用IN)不返回任何结果,因为没有&#39; x,y,z&#39;值。
答案 0 :(得分:0)
这是一种更好的方法
@objc
建立相似性可能是困难的部分。在尝试编写代码之前,请确保您已了解相关规则。
答案 1 :(得分:0)
我认为OP要求......
SELECT a_concatenation_fxn_like_listagg(T1.FieldsOfInterest) as result
FROM theTables T1,
(select FieldsOfInterest
from theTables
where userid = "user2" //different user from T1
) as T2
WHERE
T1.userid = "user1"
AND (
T1.FieldOfinterest1 like '%'||T2.FieldOfinterest2||'%'
OR
T1.FieldOfInterest2 like '%'\\T2.FieldOfInterest2||'%' //for string similarity
OR
ABS(T1.FieldOfInterest3 - T2.FieldOfInterest3) < tolerance //for numeric similarity
)