2014-09-30 2 views
0

У меня есть запросПочему запрос получает записи, которые не являются частью предложения where?

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), почему бы это было?

Я пытаюсь ге Tthe номер счета, где в таблице filedaily залога = (10,, 11,13,20) и rest_flag_11 = 0 и в элементе member_account является member_rest_flag_11 = 80 и member_rest_flag12 = 80.

Я использую SQL Server 2012.

+0

Поскольку вы используете 'OR', не считая правильной логики – Lamak

+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

Вы пропустите скобка

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) 
Смежные вопросы