我有一个(10)字符串,我想执行AND操作,然后得到1的数字并将其除以位串的长度(在这种情况下为10)。这是查询:
select a.doc
, a.sentenceid
, b.doc
, b.sentenceid
, LENGTH( REPLACE( CAST( select a.tokenizedsentence & b.tokenizedsentence AS TEXT ), '0', '')) / LENGTH(a.tokenizedsentence)
from
nlpdata a, nlpdata b
where
a.sentenceid < b.sentenceid;
单独使用时,两个查询都有效,但如何组合它们?
select a.sentenceid
, b.sentenceid
, a.tokenizedsentence & b.tokenizedsentence
from nlpdata a, nlpdata b;
和
select length( replace( cast( tokenizedsentence AS TEXT ), '0', ''))
from nlpdata;
答案 0 :(得分:3)
Select
内不需要CAST
。删除Select
以修复错误
SELECT a.doc,
a.sentenceid,
b.doc,
b.sentenceid,
Length(Replace(Cast(a.tokenizedsentence & b.tokenizedsentence AS TEXT), '0', '')) / Length(a.tokenizedsentence)
FROM nlpdata a
INNER JOIN nlpdata b
ON a.sentenceid < b.sentenceid;
作为旁注,总是使用INNER JOIN
加入两个表而不是旧式逗号分隔连接。
表现明智,没有任何区别。 INNER JOIN
比comma separated join
更具可读性,其中过滤器和加入条件将出现在Where
子句中。在Inner Join
中,您可以保留连接条件ON
子句并将过滤器移至Where
子句