Basically, I don't think torque Criteria is suited to this type of query.
First off you're selecting specific columns. Criteria is generally used for selecting torque objects for a queried table. You can select specific columns using village records though, so it is actually possible to select custom column using criteria, but cumbersome*.
Second, and most important, I don't believe a LEFT join is possible. Criteria is set up to use JOINs basically as a subquery AFAIK.
A sample subquery using a basic criteria "join" would be
Criteria criteria = new Criteria();
criteria.add(TABLEA.COLUMNA,somevalue);
criteria.add(TABLEB.COLUMNA,somevalue);
criteria.addJoin(TABLEA.COLUMNB,TABLEB.COLUMNB);
TABLEA.doSelect(criteria);
This would select entries from table A where Table B column a = somevalue and table a column b = table b column b.
All in all I would just recommend a direct query for overly complex criteria.
public static List<Object> doDynamicQuery(String dynamicQuery){
Connection connection = null;
try{
connection = Torque.getConnection(Torque.getDefaultDB());
connection.setReadOnly(true);
PreparedStatement statement = connection.prepareStatement(dynamicQuery);
ResultSet set = statement.executeQuery();
QueryDataSet dataSet = new QueryDataSet(set);
return BasePeer.getSelectResults(dataSet);
}
catch(Exception e){
log.error(e);
return null;
}
finally{
Torque.closeConnection(connection);
}
}