Я пытаюсь сделать левое соединение на двух таблицах: счета-фактуры и поставщики. Типичная проблема заключается в том, что у меня есть несколько записей в правой таблице (продавцы), что приводит к дублировать результаты:Присоединение к псевдониму, выбираемому в ядре Sqlalchemy
Vendors Invoices
vend_id name vend_id line_amt
001 Lowes 001 5.95
001 lowes 002 17
001 Lowes_ca 002 25
002 Bills 002 40
002 Bill's 003 4.35
003 Two Alphas 003 3.75
004 Apple Cartz 003 10
004 23
004 56
004 80
я ищу это:
Desired Result:
vend_id line_amt name
001 5.95 Lowes
002 17 Bills
002 25 Bills
002 40 Bills
003 4.35 Two Alphas
003 3.75 Two Alphas
003 10 Two Alphas
004 23 Apple Cartz
004 56 Apple Cartz
004 80 Apple Cartz
Но я получаю это:
vend_id line_amt name
001 5.95 Lowes
001 5.95 lowes
001 5.95 Lowes_ca
002 17 Bills
002 17 Bill's
002 25 Bills
002 25 Bill's
002 40 Bills
002 40 Bill's
003 4.35 Two Alphas
003 3.75 Two Alphas
003 10 Two Alphas
004 23 Apple Cartz
004 56 Apple Cartz
004 80 Apple Cartz
Так что я пытаюсь использовать код ниже, чтобы присоединиться к ядру sqlalchemy, но я получаю сообщение об ошибке «Исполняемый файл». Я не могу использовать ORM из-за того, как настроен db. Есть ли способ изменить этот код или лучшее решение, о котором я не думаю?
conn = engine.connect()
a = select([vendors.c.vend_id.label('vend_id'),
func.min(vendors.c.name).label('name')]).group_by(vendors.c.vend_id).alias('a')
s = select([
invoices.c.vend_id.label('vendor'),
invoices.c.line_amt.label('amount'),
]).join(a, a.c.vend_id == invoices.c.vend_id)
p = conn.execute(s)
1. Нет такой вещи, как «внутреннее левое соединение». 2. Можете ли вы опубликовать полную трассировку стека? – univerio
Спасибо, обновлено выше. –
Вам нужно сделать '.select_from', если вы хотите сделать соединение. См. Примеры [здесь] (http://docs.sqlalchemy.org/en/latest/core/tutorial.html#using-joins). – univerio