为什么查询获取不属于where子句的记录?

时间:2014-09-30 16:02:22

标签: sql

我有一个查询

  select account, collateral,rest_flag_11 ,member_rest_flag11,member_rest_flag12
   from FileDaily
  left join member
  on member.member_account=FileDaily.account
  where member.member_rest_flag11= 80 or member.member_rest_flag12=80
  and FileDaily.REST_FLAG_11=0 and FileDaily.COLLATERAL in (10,11,13,20)

获得抵押品= 30,40的记录 哪些不属于(10,11,13,20)中的抵押品, 为什么会这样?

我正在尝试查询提交表格抵押品中的帐号=(10 ,, 11,13,20) 和rest_flag_11 = 0并且在成员中member_account是member_rest_flag_11 = 80和member_rest_flag12 = 80。

我使用的是sql server 2012。

2 个答案:

答案 0 :(得分:2)

问题可能是括号,你可以通过这样做来解决:

where (member.member_rest_flag11= 80 or member.member_rest_flag12=80) and
     FileDaily.REST_FLAG_11=0 and FileDaily.COLLATERAL in (10,11,13,20)

您可以使用in重写此内容:

where 80 in (member.member_rest_flag11, member.member_rest_flag12) and
      FileDaily.REST_FLAG_11 = 0 and
      FileDaily.COLLATERAL in (10, 11, 13, 20)

我还建议您对表别名使用表缩写。它们使查询更容易编写和阅读。

答案 1 :(得分:1)

你错过括号

select account, collateral,rest_flag_11 ,member_rest_flag11,member_rest_flag12
  from FileDaily
left join member
on member.member_account=FileDaily.account
where (member.member_rest_flag11= 80 or member.member_rest_flag12=80)
and FileDaily.REST_FLAG_11=0 and FileDaily.COLLATERAL in (10,11,13,20)