根据我读过的所有内容,以下代码:
SELECT v.col1,
tab.col2
from view as v left outer join table as tab
on v.id = tab.id
and tab.value > 'some value'
应该保留视图中的所有行(V),同时在'tab'上对'some value'进行过滤。因此,如果视图有100行,则输出应该有100行。
但是,我正在使用的sql server 2012版本似乎没有发生这种情况。 “ON”语句中添加的“AND”是过滤行,即使它不应该。我也尝试使用派生表和临时表,行不断被删除。
答案 0 :(得分:0)
将我的评论复制出来,标记为每个提问者的可能解决方案:
验证了与3N1GM4相同的正确行为。在墙上扔意大利面条:
您可能正在过滤的查询中是否还有其他内容 结果?
否则,我可以复制此行为的唯一方法是使用内部联接,这不是您的代码正在执行的操作。正如@ 3N1GM4所说,你必须提供更多细节。请参阅stackoverflow.com/help/mcve。
答案 1 :(得分:-2)
应保留视图中的所有行(V),同时进行过滤 '标签'反对某些价值'。因此,如果视图有100行,则输出 应该有100行。
这个假设看起来不对。请阅读段落'左外连接'来自这篇文章:Join on wiki
如果在右侧数据集中您有多行可以连接,则可以获得更多行,然后左侧数据集具有。