После запуска этого оператора обновления
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) '