在 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 查询性能视图

SQL Server If 条件在 where 子句?

WHERE 子句中的 SQL 查询子选择优化 (SQL Server)

将用户输入的搜索查询转换为用于 SQL Server 全文搜索的 where 子句

SQL Server:IF .. ELSE 中的 Where 子句