2015-01-03 4 views
10

Ecco il mio codice per unire due tabelle:Sequel joining tables ma ho nomi di colonne sovrapposti. Come faccio a fare l'alias di questi nomi di colonna?

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

I nomi delle tabelle sono :sources, :payloads.

Il problema è che esiste una colonna :id in payload che sovrascrive la colonna :id in :sources. Ho bisogno di usare un alias in modo da ottenere solo una mega table con tutti i nomi delle colonne. Tuttavia, come attualmente scritto e poiché le mie tabelle sono attualmente strutturate, le colonne :id vengono combinate e la seconda tabella ha la precedenza. Ha senso ciò?

Come si crea un alias in modo che la colonna :id da :sources continui a essere visualizzata?

risposta

6

Per alias sources.id con un nome diverso, utilizzare Identifier aliases.

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

Impressionante, grazie! – cpursley

3

Penso che questo sia un caso in cui l'utilizzo di Sequel graph ti aiuterà.

Dalla documentazione:

Simile a #join_table, ma utilizza gli alias univoci per le colonne selezionate e mantiene metadati relativi gli alias per l'uso in altri metodi.

Il problema che si vede è che una colonna con nome identico in una tabella si scontrerà con lo stesso nome di colonna in un'altra. L'uso di Sequel di dovrebbe assicurarsi che il nome e la colonna della tabella vengano restituiti come chiave, anziché solo la colonna.

I vari file di documentazione hanno un certo numero di esempi, che farebbero una risposta davvero lunga, quindi consiglio di consultare i documenti, cercare gli usi e vedere come funzionano per voi.

Inoltre, il canale Sequel IRC può essere un grande vantaggio anche per questo tipo di domande.