在 SQL Server 查询的 WHERE 子句中引用或 INNER JOIN 一个 Pandas 数据帧值 [重复]
Posted
技术标签:
【中文标题】在 SQL Server 查询的 WHERE 子句中引用或 INNER JOIN 一个 Pandas 数据帧值 [重复]【英文标题】:Refer to or INNER JOIN a Pandas dataframe value in the WHERE clause of a SQL Server query [duplicate] 【发布时间】:2021-03-28 17:30:55 【问题描述】:我有一个 pandas 数据框,我想根据名为 PatID 的匹配患者 ID 列从 SQL Server 表中检索患者值
query = "SELECT * FROM [Hospital].[dbo].[Patient] WHERE PatID= df.PatID"
df2 = pd.read_sql(query, sql_conn)
有什么方法可以在我的数据框和 SQL 表或 SQL WHERE 子句中的列表之间加入这些匹配的 ID 值?
我收到下面的多部分标识符错误The multi-part identifier "df.PatID" could not be bound
【问题讨论】:
【参考方案1】:我认为生成您的 id 列表并将其连接到您的 sql 查询中是解决此问题的最简单方法
ids = ','.join(df['PatID'].unique())
query = f"SELECT * FROM [Hospital].[dbo].[Patient] WHERE PatID in (ids)"
df2 = pd.read_sql(query, sql_conn)
请谨慎使用此解决方案。您会将 DF 中的所有 id 加载到内存中(如果您使用的是大型数据框,则会遇到麻烦)
如果您的数据框不适合内存,我想您需要将数据从 df 传输到 sql-server 并在加入后,或者从 sql-server 传输到 python 并在合并后。
【讨论】:
谢谢,我会试试的,我的数据框来自一个 820K 行的文本文件,文件大小为 107 MB以上是关于在 SQL Server 查询的 WHERE 子句中引用或 INNER JOIN 一个 Pandas 数据帧值 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
WHERE 子句中的 OR 会降低 sql 查询性能(sql server)
where 子句中使用的 SQL Server 查询性能视图
WHERE 子句中的 SQL 查询子选择优化 (SQL Server)