Correct way to write this query?
Write yourself a view that produces, in a single column, the value of price that you're interested in.  It might be a UNION of a few different criteria.  When you're done you'll have a view of all items with two columns: the id and the price.  

Join that view to whatever else you need (perhaps including the original price), and voila.  

Tip: skip IF and just use AND and OR, per the SQL standard.  And eschew LEFT JOIN unless you know -- and know why -- you can't use a proper inner join.  If the database is pervasively unreliable in that regard, it will lead to more pain than all the outer joins in the world can alleviate.