Reputation: 11659
Here is my code for joining two tables:
DB.from(:sources).join(:payloads, :source_id => :id)
The table names are :sources
, :payloads
.
The problem is that there is an :id
column in payloads which overwrites the :id
column in :sources
. I need to use an alias so that I just obtain a mega table with all of the column names. However, as currently written and as my tables are currently structured, the :id
columns are getting combined and the second table takes precedence. Does this make sense?
How do I make an alias so that the :id
column from :sources
still shows up?
Upvotes: 12
Views: 3988
Reputation: 14412
To alias sources.id
to a different name, use the Identifier aliases.
.select_append(:sources__id___source_id).join...
# *, `sources`.`id` AS 'source_id'
Upvotes: 7
Reputation: 160571
I think this is a case where using Sequel's graph
will help you.
From the documentation:
Similar to #join_table, but uses unambiguous aliases for selected columns and keeps metadata about the aliases for use in other methods.
The problem you're seeing is an identically named column in one table is colliding with the same column name in another. Sequel's use of graph
should make sure that the table name and column are returned as the key, rather than just the column.
The various documentation files have a number of examples, which would make a really long answer, so I recommend going through the docs, searching for uses, and see how they work for you.
Also, the Sequel IRC channel can be a great asset for these sort of questions too.
Upvotes: 5