#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 ...
где ...
остальная часть вашего запроса.