а причем тут ваш сложный if тогда? ;)
update products_shop set active = 1 where id_product in ( select id_product from products where reference = 111111111) ;
update products_shop set active = 0 where not id_product in ( select id_product from products where reference = 111111111) ;
понимаешь она найдет 17 000 допустим, остануться все остальные товары включены, потом я делаю not id_product in и вырубит id которых не 2134 и 2345 например
смотри в чем соль, раньше это делалось так, выключалось все и включалось, только то что нашло reference все те id"шники, я вот и подумал зачем отрубать все если можно подставить так что бы если нашло reference и он active 1 то иди дальше , если reference не нашло active этому товару поставить 0
not id_product in - вроде то , но я спрашиваю а не вырубит он мне нафиг все , т.к. он найдет 3242 и все остальное выключит и т.д., да и как вообще он id получит если reference такого нет