是一个等于'a和b'的交叉的查询?

时间:2012-01-01 16:36:34

标签: sql postgresql

我有一个带有postgresql的数据库,我写了两个简单的查询

select page from title where word = 'france' and part = 'headline';

select page from title where word = 'france' 
intersect 
select page from title where part = 'headline';

我认为他们应该返回相同的结果,但实际上它是不同的。有什么建议吗?

表结构只是id,word,page,part。

编辑:

我也尝试了

  

选择不同的

但是带有intersect的查询总是返回一些不相关的结果。 这是一些Web新闻页面的简单反向表的DB。因此,页面,单词和部分不是唯一的。但没有重复的条目。

2 个答案:

答案 0 :(得分:4)

WHERE (a) AND (b)是应用于每条记录的布尔条件。仅当记录满足整个条件时才会包含记录。换言之,仅包含word为'france'且part同时为'标题'的记录


您需要的更类似于在您的情况下使用OR吗?

select page from title where word = 'france' or part = 'headline';


或者您是否因为有多个记录引用同一页面而遇到问题?

例如......

1 | 'france'  | 'aaa' | 'headline'
2 | 'france'  | 'bbb' | 'body'
3 | 'germany' | 'bbb' | 'headline'

'aaa'将由您的查询返回。

只有您的第二个查询才会返回

'bbb'

答案 1 :(得分:4)

我看到的唯一技术差异是交叉操作会产生唯一的page s。第一个可能会产生重复。

<强>更新 他们不一样。 正确的答案是Dems已经解释过的(我投了他的答案):

page  word     part
1     france   headline
2     uk       headline
2     france   body

word = france AND part = headline =>第1页

word = france =&gt;第1页,第2部分=标题=>第1,2页

前两组的交集=>第1,2页

Update2:对问题的回答:如何使交叉给出相同的结果? 相交必须在条件下完成,如此处所示。

select page, word, part from title where word = 'france' 
intersect 
select page, word, part from title where part = 'headline'