sql server外连接有多个或条件

时间:2014-02-12 18:18:26

标签: sql sql-server-2008 outer-join

使用Sql Server 2008,我们有一个查询连接两个表Customer和Customer_Info,这些列看起来像

客户

   visit_date
   customer_seq_num

CUSTOMER_INFO

   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

我得到了更多的结果....不应该按照或者和安排的方式导致它为每个这些声明返回更多或相同数量的记录?为什么会删除或导致更多记录返回?似乎sql server正在使用嵌套逻辑做错事件

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

它与SQL查询中的LEFT JOIN有关。如果是INNER JOIN,你的期望是正确的。在LEFT JOIN(或RIGHT JOIN)的情况下,首先应用连接条件,然后完成连接。因此左表上的每个谓词(即使它是带有多个OR谓词的AND)实际上会减少用于最后左连接的行数。 [reference]