Ok, I'll try and help with the "teach a man how to fish".
Cake models represent database tables. Each model can have associations defined, such as belongsTo, hasMany, hasOne, etc.. When you define an association, cake recognizes it and gets all the related data you need.
For example, let's say you have a model Post and a model Comment. If you set up an association between them (Post-hasMany-Comment, and Comment-belongsTo-Post), cake will work the magic every time you do a Post->find() or Comment->find()
So what does this mean? If you do something like this:
$data = $this->Post->findByTitle('your post title');
the $data variable will contain not only your Post data, but also all the associated comments. You can always see what's in there by calling debug($data);
The level of "depth" cake will go with the related data can be set by using the recursive property / parameter, or by using the built-in Containable behaviour.
Another benefit of defining associations between model (to answer your comment on Rob's answer) is that you don't need to put all your models in the $uses var. In fact, that would be the wrong thing to do.
Believe it or not, but once you've defined your associations properly, this will work:
class PostsController extends AppController
{
// not really needed, cake detects it automagically
var $uses = array('Post');
function index()
{
$comments = $this->Post->Comment->find('all');
}
}
Sweet, isn't it?
In your case, it would be something like this:
$this->Table1->find
(
'all',
array
(
'conditions' => array
(
'Table2.foreign_key_id_table3' => X
)
)
);
There are many other useful tips when you're working with cake's built-in functions and classes, so I suggest you take some time to learn cake properly, it will make your life easier.