我有一个带有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。因此,页面,单词和部分不是唯一的。但没有重复的条目。
答案 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'