Вам нужно сделать left outer join
- это все.
update watchedItems wi left outer join bidGroups bg
on wi.bidGroupID = bg.bidGroupID
set
wi.won = 1,
bg.bidGroupQty = bg.bidGroupQty - 1
where wi.id = 2
and wi.aid = 200618152822
and (bg.id = 2 or bg.id is null)
Если watchedItems.bidGroupId
равно нулю, то только обновленная найденная строка будет обновлена в watchedItems
, так как присоединиться к ней нечего.bidGroups
.Если это не так, и объединение получает строки в обеих таблицах, обновления обеих таблиц происходят очень хорошо.
Использование watchedItems, bidGroups
аналогично inner join
, поэтому, когда в * нет записи в bidGroups
чтобы присоединиться, вы также не получите результат от watchedItems
.Используйте те же самые предложения join
и where
для select
вместо update
, и вы увидите разницу:
select wi.won, bg.bidGroupQty
from watchedItems wi, bidGroups bg
where wi.id = 2 and wi.aid = 200618152822
and (bg.id = 2 or bg.id is null)
and wi.bidGroupID = bg.bidGroupID
против:
select wi.won, bg.bidGroupQty
from watchedItems wi left outer join bidGroups bg
on wi.bidGroupID = bg.bidGroupID
where wi.id = 2 and wi.aid = 200618152822
and (bg.id = 2 or bg.id is null)