Добре, добре, успях да намеря "чисто" решение, използвайки join, set и т.н. на codeigniter. И така, страхотното е, че ще имате всички предимства на CI от използването на $this->db->join(), $this->db->join() и т.н. като екраниране и добавяне на кавички.
Затова първо направете всичките си CI неща:
$this->db->join(..) // Set all your JOINs
$this->db->set(..) // Set your SET data
$this->db->where(..) // Set all your WHEREs
След това можете да създадете заявката, като използвате готовите, изчистени и екранирани елементи на заявката на Active Record:
// JOIN
$sql = "UPDATE $this->baseTable ";
$sql .= implode(' ', $this->db->ar_join);
// SET
$sql .= ' SET';
$setArray = array();
foreach ($this->db->ar_set as $column=>$newValue)
array_push($setArray, " $column = $newValue");
$sql .= implode(',', $setArray);
// WHERE
$sql .= ' WHERE '.implode(' ', $this->db->ar_where);
$this->db->query($sql);
Ако някой има по-добро решение, с радост ще го приема и ще го използвам вместо него