使用 SQL 和 Sqlalchemy 查询的表具有相同的列名
Posted
技术标签:
【中文标题】使用 SQL 和 Sqlalchemy 查询的表具有相同的列名【英文标题】:Tables being queried with SQL and Sqlalchemy have same column names 【发布时间】:2020-08-02 08:21:53 【问题描述】:我正在使用 sqlalchemy 和 SQL 查询代码查询 mysql 数据库中的各种不同的表。
我现在的问题是重命名一些正在加入的列。查询都进入一个数据框。
SELECT *
FROM original
LEFT JOIN table1
on original.id = table1.t1key
LEFT JOIN table2
on original.id = table2.t2key
LEFT JOIN table3
on original.id = table3.t3key;
我真正想从这些表中得到的只是添加到我的查询中的单个列。每个表都有一个同名的列。我使用别名的方法如下,
table1.columnchange AS 'table1columnchange'
table2.columnchange AS 'table2columnchange'
table3.columnchange AS 'table3columnchange'
但我尝试实现这一点的各种方法最终都会出现烦人的错误。
我也在查询大约 20 个不同的表,所以在开始时使用SELECT *
是为了方便起见而效率低下的理想选择。
我正在寻找的输出是一个数据框,其中包含我需要的每一列(然后我试图对其进行过滤并使用 python 构建建模)。我可以通过 sqlalchemy 将查询管理到 pandas 中,别名是现在让我感到悲伤的原因。
提前致谢
【问题讨论】:
【参考方案1】:您可以使用嵌套查询:
SELECT
original.column1 as somename,
table1.column1 as somename1,
table2.column1 as somename2
FROM
(SELECT
column1
FROM
original
) original
LEFT JOIN (
SELECT
column1
FROM
table1
) table1 ON original.id = table1.t1key
LEFT JOIN (
SELECT
column1
FROM
table2
) table2 ON original.id = table2.t2key
【讨论】:
实际上,我使用选择功能的顶部,因为我可以在制作 aias 的同时还使用 * 选择所有。我相信带有括号数据的左连接是破坏它的原因。以上是关于使用 SQL 和 Sqlalchemy 查询的表具有相同的列名的主要内容,如果未能解决你的问题,请参考以下文章