ошибка выбора столбцов с таблицами, созданными с использованием двойных кавычек

#python #sql #sqlalchemy #apache-superset

#python #sql #sqlalchemy #apache-надмножество

Вопрос:

Я подключил базу данных postgresql к Apache Superset и играю с их редактором SQL. Я столкнулся с проблемой, когда я не могу выполнить левое соединение между двумя таблицами с соответствующим идентификатором.

 SELECT id, profile_name FROM "ProductionRun"
LEFT JOIN "StatsAssociation" ON "ProductionRun".id = "StatsAssociation".production_run_id;
 

Правильный ли мой приведенный выше синтаксис? Ссылки на таблицы должны заключаться в двойные кавычки, поскольку они создаются с учетом регистра. Это возвращает только столбцы id и profile_name ProductionRun таблицы без объединения с StatsAssociation таблицей.

Я создал таблицы с помощью sqlalchemy, и вот схема таблицы:

ProductionRun

 class ProductionRun(Base):
    __tablename__ = 'ProductionRun'

    id = Column(Integer, primary_key=True, autoincrement=True)
    profile_name = Column(String, nullable=False)
 

StatsAssociation

 class StatsAssociation(Base):
    __tablename__ = 'StatsAssociation'

    production_run_id = Column(Integer, ForeignKey('ProductionRun.id'), primary_key=True)
    stats_package_id = Column(Integer, ForeignKey('StatsPackage.id'), unique=True, nullable=False)

    stats_package = relationship('StatsPackage', back_populates='stats_association', cascade='all,delete')
    production_run = relationship('ProductionRun', back_populates='stats_association')
 

Когда я просматриваю таблицы, они оба существуют и StatsAssociation имеют production_run_id столбец, который имеет те же идентификаторы, ProductionRun что и .

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

1. Вы не указываете ни одного столбца из таблицы «StatsAssociation», поэтому ожидается, что ничего не появится. Чтобы получить столбцы в выходных данных запроса SELECT, вам необходимо их перечислить. Например, и просто для начала: SELECT id, profile_name, production_run_id FROM ... где ... остальная часть вашего запроса.

2. не могли бы вы изменить ^ на ответ? Я новичок в SQL, поэтому это не так очевидно, как кажется.

3. Конечно, и не беспокойтесь. Когда-то мы все были новичками 🙂

Ответ №1:

Первоначально это было опубликовано как комментарий.

Вы не указываете ни одного столбца из таблицы «StatsAssociation», поэтому ожидается, что ничего не появится. Чтобы получить столбцы в выходных данных запроса SELECT, вам нужно их перечислить — единственное исключение, о котором я могу в настоящее время думать, если вы используете "TableName".* или * в SELECT .

Например, и просто для начала:

 SELECT id, profile_name, production_run_id 
FROM ... 
 

где ... остальная часть вашего запроса.