I’m playing with rom SQL joins for first time in order to use them later in a real application.
As example, I’m wondering how one should proceed to order by a joined table field.
If I try:
It doesn’t work. This is because
users relation default dataset specifies the list of
users columns in the
SELECT clause instead of using the wildcard
* , while
join doesn’t modify it:
SELECT `users`.`id` AS `id`, `users.name` AS `name` ..... INNER JOIN `tasks`...
So, this has been my first surprise… If I’m not missing something, in order to have access to joined columns you have to manually change the
SELECT clause. Something like the following will work:
select will change the default dataset
SELECT clause for a mere
*. It will load all
tasks columns, without qualifying, and then it will be possible to order by any of them:
However, as the qualified default dataset
SELECT is lost in favour of a single
*, all my configured aliases are falling by the wayside.
I have tried to use
select_append instead of
select, to do something like:
But it doesn’t work as it is looking for
:task_field attribute in
I’m also wondering how
join relates with
combine relations method.
combine doesn’t seem to change at all the dataset generated sql, so I guess it plays at a different level, surely performing n + 1 queries.
In short, I guess I have several related questions:
- Is having to use
join(:table).selectthe recommended way to perform joins while still being able to access joined table columns?
- If so, how can we do to keep aliases?
combineplay in another league performing n + 1 queries instead of joins?
Thanks for any feedback.