python - 如何使用其他表中已替换的 ID 加入查询?

标签 python sql sqlalchemy

我有这两张表

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/

相关文章:

sql - 语句 'for update' 是如何工作的?

python - SQLAlchemy 核心连接上下文管理器

python - 将一列值的总和除以数据框中所有行的计数

python - 当 Python 中不再显示唯一 ID 时标记大型数据集

mysql - 多重连接过滤

python - 在 python->SQLAlchemy 中连接到 mysql (MariaDB) 失败,而在 cmd 中成功

python - 使用 INTERSECT 和 UNNEST 的 sqlalchemy

python - 如何从 eclipse 调试用 mrjob 编写的 python MapReduce 程序

python - 从numpy或matlab中的满秩非方阵获得可逆方阵

c# - 插入sql数据库时处理大量数据