Suppose I have a lookup table mylookup(lkid, lkname, ...)
Then I have other 2 tables:
mytab(id, parentid, name, lookname, ...)
yourtab(id, parentid, ...) --id, parentid coming from mytab
Then I have a update try to get lkid and it's parent lkid, the sql like:
update yourtab set columnx =
case
when (select lkid from mylookup a join mytab b on a.lkname = b.lkname where b.id = c.parentid ) > 3
and (select lkid from mylookup a join mytab b on a.lkname = b.lkname where b.id = c.parentid ) >
(select lkid from mylookup where lkname = c.lkname )
then 1
else 0
end
from yourtab c
this sql performance is not good. (select lkid from mylookup a join mytab b on a.lkname = b.lkname where b.id = c.parentid ) is called 2 times for each row in yourtb.
how to rewrite sql to improve performance for this case?