2015-01-03 15 views
10

Oto mój kod do łączenia dwóch tabel:Sequel łączy tabele, ale mam nakładające się nazwy kolumn. Jak mogę zmienić nazwy tych kolumn?

DB.from(:sources).join(:payloads, :source_id => :id) 

Nazwy tabel są :sources, :payloads.

Problem polega na tym, że istnieje kolumna :id w ładunkach, która nadpisuje kolumnę :id w :sources. Potrzebuję użyć aliasu, aby uzyskać mega tabelę ze wszystkimi nazwami kolumn. Jednak obecnie pisane i jak moje tabele są obecnie uporządkowane, kolumny :id są łączone, a druga tabela ma pierwszeństwo. Czy to ma sens?

Jak utworzyć alias, aby kolumna z :sources nadal się wyświetlała?

Odpowiedz

6

Do aliasu sources.id na inną nazwę należy użyć Identifier aliases.

.select_append(:sources__id___source_id).join... 
# *, `sources`.`id` AS 'source_id' 
+0

Niesamowite, dzięki! – cpursley

3

Myślę, że jest to przypadek, w którym korzystanie z Sequel's graph pomoże.

Z dokumentacji:

podobne do #join_table, ale używa jednoznacznych aliasy dla wybranych kolumn i przechowuje metadane o aliasów do wykorzystania w innych metodach.

Problem, który widzisz, jest kolumną o identycznej nazwie w jednej tabeli, która koliduje z tą samą nazwą kolumny w innej. Sequel użyje numeru , aby upewnić się, że nazwa i kolumna tabeli są zwracane jako klucz, a nie tylko kolumna.

Różne pliki dokumentacji mają wiele przykładów, które mogłyby dać naprawdę długą odpowiedź, dlatego zalecam przeglądanie dokumentów, wyszukiwanie zastosowań i sprawdzanie, jak one działają.

Kanał IRC Sequel może być również bardzo przydatny w przypadku tego typu pytań.