Sequel joining tables but I have overlapping column names. How do I alias these column names?
Asked Answered
D

2

12

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?

Dobruja answered 3/1, 2015 at 18:25 Comment(0)
Z
7

To alias sources.id to a different name, use the Identifier aliases.

.select_append(:sources__id___source_id).join...
# *, `sources`.`id` AS 'source_id'
Zak answered 3/1, 2015 at 18:56 Comment(1)
I prefer using qualified aliases as Sequel[:sources][:id].as(:source_id).Jester
A
5

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.

Acerbity answered 3/1, 2015 at 18:53 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.