Ошибка мышления с заявлением об обновлении - PullRequest
0 голосов
/ 13 июня 2018

После запуска этого оператора обновления

update lol as l 
set prodnr = p.prodnr
from prog as p
where  (l.ponr in ('1000') and  l.abo=p.abo and l.sto=p.sto and l.ponr=p.ponr 
and l.prodnr!=p.prodnr)

Я ожидаю, что следующий оператор select даст 0 записей

select *
from lol l, prog p  
where (l.ponr in ('1000') and  l.abo=p.abo and l.sto=p.sto and l.ponr=p.ponr 
and l.prodnr!=p.prodnr)

, но, к сожалению, это не так ... Почему?



РЕДАКТИРОВАТЬ: Я почти сошел с ума .. Я думаю, проблема была в том, что есть несколько записей в таблице prog для этого условия: l.abo = p.abo и l.sto = p.sto и l.ponr = p.ponr и l.prodnr! = p.prodnr.После того, как я добавлю следующее дополнительное условие:

and p.pversion notnull and p.pversion !='0' and p.pversion = l.pversion 

, чтобы выражение выглядело так:

update lol as l 
set prodnr = p.prodnr
from prog as p
where  (l.ponr in ('1000') and  l.abo=p.abo and l.sto=p.sto and l.ponr=p.ponr 
and l.prodnr!=p.prodnr and p.pversion notnull and p.pversion !='0' and p.pversion = l.pversion)

select

select *
from lol l, prog p  
where (l.ponr in ('1000') and  l.abo=p.abo and l.sto=p.sto and l.ponr=p.ponr 
and l.prodnr!=p.prodnr and p.pversion notnull and p.pversion !='0' and p.pversion = l.pversion)

дает 0 записей.Так что мне интересно, если первое обновление действительно что-нибудь обновляет.Может быть, первая найденная запись, которая удовлетворяет условию '(l.ponr in (' 1000 ') и l.abo = p.abo и l.sto = p.sto и l.ponr = p.ponr и l.prodnr!= p.prodnr) '

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...