Przy użyciu Chciałbym dołączyć dwa podzapytania, które dzielą niektóre nazwy kolumn, a następnie tabelę - kwalifikują się te kolumny w select.Sequel - czy mogę aliasować podzapytania w złączeniu?
rozumiem, jak to zrobić, jeśli dwa zestawy danych są tylko tabele. Na przykład. jeśli mam users
tabelę i tabelę items
z przedmiotów należących do użytkowników, a ja chcę do listy nazw i ich właścicieli elementy nazwy:
@db[:items].join(:users, :id => :user_id).
select{[items__name, users__name.as(user_name)]}
produkuje
SELECT "items"."name", "users"."name" AS "user_name"
FROM "items"
INNER JOIN "users" ON ("users"."id" = "items"."user_id")
jako pożądane.
Jednak jestem pewien jak to zrobić, jeśli mam połączenie dwóch dowolnych zestawów danych reprezentujących podzapytania (nazywamy je my_items
i my_users
)
Składnia przypuszczalnie przyjąć formę
my_items.join(my_users, :id => :user_id).
select{[ ... , ... ]}
gdzie Podam kwalifikowane nazwy kolumn, aby uzyskać dostęp do my_users.name
i my_items.name
. Jaka jest odpowiednia składnia, aby to zrobić?
Częściowym rozwiązaniem jest użycie t1__name
do pierwszego argumentu, ponieważ wydaje się, że zbiór danych dostarczane do złączenia jest aliasem z t1
, t2
itp Ale to nie pomaga mi zakwalifikować nazwę elementu, który muszę dostarczyć drugi argument.
Myślę, że najbardziej pożądane rozwiązanie umożliwiłoby podanie aliasów dla zestawów danych w łączeniu, np. jak poniżej (choć oczywiście to nie działa dla wielu powodów)
my_items.as(alias1).join(my_users.as(alias2), :id => :user_id).
select{[alias1__name, alias2__name ]}
Czy istnieje jakiś sposób, aby to zrobić?
Dzięki!
Aktualizacja
myślę from_self
robi mi część drogi tam, na przykład
my_items.from_self(:alias => :alias1).join(my_users, :id => :user_id).
select{[alias1__name, t1__name]}
wydaje się postępować właściwie.
Oh! To jest to, czego potrzebuję. Nie ma problemu z podzapytaniem, chociaż zgadzam się, że to nieprzyjemne. – brahn