Продолжение выбора столбцов с одинаковыми именами приводит к удалению столбцов

#sql #ruby #sequel

#sql #ruby #продолжение

Вопрос:

Я объединяю разные таблицы, в которых есть столбцы с одинаковыми именами. Когда я впервые попытался их выбрать, я столкнулся с ambiguous column name ошибкой, т. Е. Были столбцы с одинаковыми именами. Поэтому я сделал явный выбор столбцов, но теперь я получаю меньше столбцов, чем я просил.

   response = DB[:courses].select(Sequel[:courses][:id], Sequel[:courses][:title], Sequel[:courses][:headline], Sequel[:courses][:description], Sequel[:courses][:slug], Sequel[:courses][:avg_duration], Sequel[:courses][:points], Sequel[:courses][:intro_video_url], Sequel[:courses][:background_color], Sequel[:courses][:views], Sequel[:courses][:certificate_option], Sequel[:courses][:url], Sequel[:courses][:is_active], Sequel[:courses][:num_subscribers], Sequel[:courses][:num_reviews], Sequel[:courses][:num_finished], Sequel[:courses][:avg_rating], Sequel[:courses][:avg_rating_recent], Sequel[:locales][:title], Sequel[:locales][:english_title], Sequel[:courses][:has_caption], Sequel[:courses][:is_paid], Sequel[:courses][:price], Sequel[:courses][:price_discount], Sequel[:courses][:currency], Sequel[:instructors][:headline], Sequel[:instructors][:name], Sequel[:instructors][:slug], Sequel[:instructors][:image], Sequel[:instructors][:initials], Sequel[:instructors][:url], Sequel[:instructors][:origin_id], Sequel[:courses][:image_preview], Sequel[:courses][:image_view], Sequel[:difficulties][:name], Sequel[:course_types][:name], Sequel[:origins][:image_url], Sequel[:origins][:name], Sequel[:origins][:url_about])
    .join(:locales, id: Sequel[:courses][:locale_id])
    .join(:instructors, id: Sequel[:courses][:instructor_id])
    .join(:origins, id: Sequel[:courses][:origin_id])
    .join(:difficulties, id: Sequel[:courses][:difficulty_id])
    .join(:course_types, id: Sequel[:courses][:course_type_id])
    .where(Sequel.ilike(Sequel[:courses][:title], "%#{title}%")).where( is_paid: is_paid).limit(count).offset(count * (page - 1))
 

Я ожидал получить 38 столбцов, но я получаю 32. Я попытался явно получить только столбцы ( select.columns ) или получить через map ( select.map ), однако результат тот же. Когда я выполняю этот запрос изначально в приглашении SQLite, он возвращает точные 38 столбцов. Я также пытался выполнять запросы с помощью gem sqlite3 , однако одно и то же приглашение приводит только к 32 столбцам.

Как я могу получить все столбцы без каких-либо жертв? Могу ли я переименовывать имена при выборе или есть какое-либо другое решение?

Комментарии:

1. Могу ли я переименовывать имена при выборе или есть какое-либо другое решение? Да, вы можете использовать псевдонимы столбцов в документах инструкции select

Ответ №1:

Сначала вам нужно присвоить каждой таблице псевдоним. Затем, когда вы пишете свой оператор select, добавьте к каждому столбцу, который вы выбираете, псевдоним таблицы like alias.column_name .