有没有一种方法可以联接多个查询并在数据中添加一列,该列是数据来自哪个查询的数组?

问题描述 投票:0回答:2

编辑1:到目前为止,我已经在测试中提出了以下SQLAlchemy,但是我仍然需要找出如何向其添加最终的SELECT,以将数据放入所需的表单中。有什么想法吗?

query1 = db.session.query(literal_column("'first_name'").label("matches"), models.User.id).filter(models.User.first_name == 'Joe')
query2 = db.session.query(literal_column("'last_name'").label("matches"), models.User.id).filter(models.User.last_name == 'Su')

union = db.union_all(query1, query2)
results = db.session.query(db.alias(union, name='users')).all()

[请原谅,我会尽力解释。如果有人问,我什么也没尝试。我没有找到直接说明是否或如何完成此操作的信息。

主要问题是如何将多个较小的查询合并到一个表中并将它们组合在一起,以使结果数据具有一列(该数据很可能包含一个数组),该列是返回相同对象的查询的列表。

例如,如果我有一个名为Users的表,其中包含以下数据

id | first_name | last_name | age
1  |Joe         | Shmoe     | 39
2  |Marry       | Su        | 63
3  |Frank       | Su        | 39

并且我有以下查询(为简单起见,使用SQL,但最终应使用PostgreSQL ORM样式代码)

Select * from Users where first_name = "Joe"; 
 - resulting Ids: 1
Select * from Users where last_name = "Su";
 - resultings Ids: 2,3
Select * from Users where age ="39";
 - resulting Ids: 1,3

合并查询应以]结尾>

id | first_name | last_name | age | matches
1  | Joe        | Shmoe     | 39  | ['first_name', 'age']
2  | Marry      | Su        | 63  | ['last_name']
3  | Frank      | Su        | 39  | ['last_name', 'age']

如果可能的话,怎么办?另外要注意。我希望能够专门标记比赛中要使用的内容。例如,我可以像在我的示例中一样将第一个查询标记为“ first_name”,或者可以将其命名为“ firstName”或“ Dude”,或者我想要的任何名称。

编辑1:到目前为止,我已经在测试中提出了以下SQLAlchemy,但是我仍然需要找出如何向其添加最终的SELECT,以将数据放入所需的表单中。有任何想法吗? query1 = db ....

postgresql sqlalchemy
2个回答
1
投票

这是执行此操作的一种方法:


0
投票

这是我最终想出的。不知道这是否是最佳解决方案,但它确实有效。

© www.soinside.com 2019 - 2024. All rights reserved.