【发布时间】:2014-03-11 06:31:32
【问题描述】:
使用 Sql Server 2008,我们有一个查询连接两个表 Customer 和 Customer_Info,列看起来像
客户
visit_date
customer_seq_num
客户信息
customer_seq_num
customer_detail_number
customer_value
这个查询的连接看起来像
Customer
left outer join Customer_Info
on Customer_Info.customer_seq_num = Customer.customer_seq_num
and Customer_Info.customer_detail_number = 31
and (
(right(Customer_Info.customer_value,4)='8788' and month(visit_date)=2) or
(right(Customer_Info.customer_value,4)='8808' and month(visit_date)=12)or
(right(Customer_Info.customer_value,4)='8891' and month(visit_date)=9)
)
问题是,如果我按原样运行查询,我会得到 400 条记录。如果我从“和部分”中删除第一个条件,则意味着我注释掉
--(right(Customer_Info.customer_value,4)='8788' and month(visit_date)=2) or
我得到更多结果.... or 和 and 的排列方式不应该导致它为每个语句返回更多或相同数量的记录吗?为什么要删除或导致更多记录返回?似乎 sql server 对嵌套逻辑做了一些奇怪的事情
感谢您的帮助
【问题讨论】:
-
你的意思是
less or the same number of records对吗? -
我同意你的期望。您确定
400是总行数吗?许多程序只向您显示查询的前 X 行,该查询会返回更多。 -
我不这么认为。当我在有或没有该条件的情况下运行时,它始终显示相同的两个数字。如果我使用的是什么(sql server managment studio),如果它只是在某个时候进行调整,我不会看到相同的数字
-
user2989408 ,实际上我的意思是更多。它应该拉到 x 或... x+1 或.... x+2 的位置
-
不确定如何通过删除该条件来获得更多行...这是左连接,此查询的行数应该与客户表中的行数相同(或者更多,如果你每行有多个匹配项)......不少于。尝试从客户中运行 select count(),然后从查询中运行 count()...它们是一样的吗?
标签: sql sql-server-2008 outer-join