Ok, j'ai réussi à trouver une solution "propre", en utilisant la jointure, l'ensemble, etc. de codeigniter.>join(), etc. comme échapper et ajouter des guillemets.
Alors faites d'abord tous vos trucs CI :
$this->db->join(..) // Set all your JOINs
$this->db->set(..) // Set your SET data
$this->db->where(..) // Set all your WHEREs
Ensuite, vous pouvez créer la requête à l'aide des éléments de requête prêts, nettoyés et échappés d'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);
Si quelqu'un a une meilleure solution, je l'accepterai avec plaisir et l'utiliserai à la place