在postgres中嵌套选择

时间:2016-02-23 17:22:47

标签: sql postgresql

我有一个(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;

1 个答案:

答案 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 JOINcomma separated join更具可读性,其中过滤器加入条件将出现在Where子句中。在Inner Join中,您可以保留连接条件ON子句并将过滤器移至Where子句