我有这两张表
User
| id | name |
| 1 | user1 |
| 2 | user2 |
| 3 | user3 |
Event
| id | name | created_by | published_by |
| 1 | event1 | 1 | 2 |
| 2 | event2 | 2 | 2 |
| 3 | event3 | 3 | 1 |
我想加入他们的行列,当显示事件表时,所有引用都将替换为用户表中的实际名称。这就是我的基本连接查询的样子
select
Event.id as event_id,
Event.name as event_name,
Event.created_by as event_created_by,
Event.published_by as event_published_by,
User.name as user_name
from
Event
left join User on created_by = User.id
在 SQLAlchemy 中转换为
db.session.query(Event, User).outerjoin(User, Event.created_by==User.id).all()
并产生以下输出
# event_id event_name event_created_by event_published_by user_name
1 1 event1 1 2 user1
2 2 event2 2 2 user2
3 3 event3 3 1 user3
实际上它应该看起来像:
# event_id event_name event_created_by event_published_by
1 1 event1 user1 user2
2 2 event2 user2 user2
3 3 event3 user3 user1
我如何在 SQLAlchemy 中实现它?
最佳答案
使用一个额外的 LEFT 连接如下 -
SELECT Event.id AS event_id,
Event.name AS event_name,
Event.created_by AS event_created_by,
Event.published_by AS event_published_by,
U1.name AS event_created_by,
U2.name AS event_published_by
FROM Event
LEFT JOIN User U1 ON Event.created_by = U1.id
LEFT JOIN User U2 ON Event.published_by = U2.id;
关于python - 如何使用其他表中已替换的 ID 加入查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57688007/