python - 如何将 SQL 查询与之前执行的另一个 SQL 查询的结果结合使用?
问题描述
我正在尝试对上一个 SQL 查询的结果使用 SQL 查询,但我做不到。我正在创建一个 python 脚本并使用 postgresql。我有 3 个表,我需要从中匹配不同的列并连接数据,但一次只使用 2 个表。
例如:我有 table1,其中有一个 codecolumn,并且 table2 中有相同的代码列现在我匹配两列的值并连接表 2 中对应于代码的列“区域”和列“pincode” ' 来自表 1。
为此,我使用了以下有效的查询:
'''
select
table1.code,table2.code,table2.area,table1.pincode
from
table1 left join table2
ON
table1.code=table2.code
order by table1.row_num '''
我得到了结果,但是在这个数据中有一些数据,其中区域值返回为 None 无论我在匹配代码列时获得区域为 None,我都需要使用 table1 中的 pincode 列和 table3 中的 pincode 列再次从table3.area中找到对应的区域。
所以我使用了以下查询:
'''
select
table1.code,table3.area,table1.pincode
from
table1 left join table3
ON
table1.pincode=table3.pincode
IN (
select
table1.code,table2.code,table2.area,table1.pincode
from
table1 left join table2
ON
table1.code=table2.code
where table2.area is NULL
order by table1.row_num '''
我收到以下错误:
sqlalchemy.exc.ProgrammingError: (psycopg2.errors.SyntaxError) subquery has too many columns
我的python代码如下:
import psycopg2
from sqlalchemy import create_engine
engine=create_engine('postgresql+psycopg2://credentials')
conn=engine.connect()
query = '''
select
table1.code,table2.code,table2.area,table1.pincode
from
table1 left join table2
ON
table1.code=table2.code
order by table1.row_num '''
area=conn.execute(query)
area_x=area.fetchall()
for i in area_x:
print(i)
query2 = select
table1.code,table3.area,table1.pincode
from
table1 left join table3
ON
table1.pincode=table3.pincode
IN (
select
table1.code,table2.code,table2.area,table1.pincode
from
table1 left join table2
ON
table1.code=table2.code
where table2.area is NULL
order by table1.row_num '''
area=conn.execute(query2)
area_x=area.fetchall()
for i in area_x:
print(i)
这是我的第一个查询返回数据的方式:
无论我在哪里无法匹配代码列,我都会在表 2 中的 area 列中得到 None 值,并且每当 area 值为 None 时,我必须应用另一个查询来查找此数据现在我必须将 table1.pincode 中的数据与中的数据匹配table3.pincode 查找 table3.area 并将 None 值替换为 table3.area
这是找到该区域的两种方法
期望的结果应该是:
什么可能是正确的解决方案?谢谢你
解决方案
看起来您的 query2 需要 where 子句和子查询,因为应将错误消息减少为您尝试传递给外部查询的列。query2 应该是这样的:
query2 =
select
table1.code,table3.area,table1.pincode
from
table1 left join table3
ON
table1.pincode=table3.pincode
WHERE table1.code
IN (
select
table1.code
from
table1 left join table2
ON
table1.code=table2.code
where table2.area is NULL
推荐阅读
- c# - 当覆盖 HandleAuthenticateAsync 失败原因丢失 c# .net core 3.1
- firebase - 如何将 2 Stream 放入流构建器中
- reactjs - 为 React 组件渲染设置不同的间隔
- mongodb - MongoDB:错误:无法连接到服务器 127.0.0.1:27017
- excel - Excel SUM 函数不起作用(显示 0),但使用加法 (+) 有效
- android - 单击列表视图中的项目时更改搜索视图中的文本
- c - 将数据从 flex 传递给 bison 语法
- android - 圆底屏幕角的底视图切口 [显示切口]
- linux - Chromium-Browser 忽略 --allow-file-access-from-files 标志
- javascript - this.value.toFixed 不是函数