【发布时间】:2021-08-05 12:57:56
【问题描述】:
我有一个包含大约 140 万行的表,我想编写一个 sql 选择语句,它返回列表中第一列中的值(唯一 ID)中存在的所有行。
此列表可以包含 1 到 50k 个 ID,并且每次运行脚本时都会生成,并且每次都可能不同。根据此列表中的 id 编号值,我只想从数据库中提取第一列中具有这些 id 编号的行。
为了更完整:我在 python 脚本中执行上述所有操作。该脚本首先生成我需要的 ID 列表。然后我使用 pyodbc 与 azure ODBC 数据库进行通信。
我的第一个想法是使用“IN”语句:
myquery = SELECT * FROM mydb WHERE id IN mylist
显然,这不起作用,因为您需要在“IN”语句之后指定特定值,因为它基本上是“OR”语句的替代品。
不幸的是,即使经过几个小时的谷歌搜索,我还是找不到一种明显且易于理解的方法来将“IN”语句与 mylist 的变量名结合使用。在这种情况下这甚至可能吗?还是有其他更好的方法来获得相同的结果?
编辑:最好我正在寻找一种方法,而不必每次运行脚本时都为我的 IDlist 生成一个新的数据库表。
【问题讨论】:
-
你在问什么 DBMS?大多数 DBMS 没有“列表”作为有效数据类型。
-
我建议将 ID 列表加载到
mydb.id_list表中,然后按照select * from mydb.table where id in (select id from mydb.id_list)的形式或执行inner join到假设的mydb.id_list表 -
为了更加清晰和完整,我正在编写一个生成此 ID 列表的 python 脚本。然后我使用 python (pyodbc) 与 azure 数据库进行通信,以检索我必须进一步处理的请求数据。这部分是关于我需要编写的 SQL 查询以从我需要的数据库中获取数据
标签: sql odbc azure-sql-database pyodbc