python - 在 SQL 中迭代
问题描述
给定以下 Python 代码:
keys1 = [1, 2, 3, 4, 5]
keys2 = [6, 7, 8, 9, 10]
for k1, k2 in zip(keys1, keys2):
# do something with the pair of keys, k1 and k2
我将如何在 SQL 中实现这样的东西?
基本上,我有大约 15 行 SQL 代码。此 SQL 根据当前已硬编码到其中的两个键执行一些操作。那么现在我需要使用大约 10 对其他键来执行相同的 SQL。
简单但不优雅的解决方案只是复制/粘贴代码 10 次并对密钥进行硬编码,但我很好奇是否有一些迭代方式来执行此操作,就像上面在 Python 中演示的那样。
需要注意的重要一点是,在将其连接到数据库时,我无法在 Python 中实现逻辑。它必须是纯 SQL。
提前致谢。
编辑:为澄清起见,但这可以在 SQL 中实现,不必与我的 python 演示完全相同。我只使用了列表和 zip bc,这就是我在 Python 中知道的方式。我可以很容易地定义一个函数并调用它十次,每次传递一对键,完全避免 zip 和列表。
我的主要目标是减少我必须一遍又一遍地编写相同的 sql 的次数。
在 Python 中,我将迭代与数据结构或函数一起使用。在 SQL 中?我不知道。
对不起,这是为了工作。我无法发布 sql。但从概念上讲,我认为这并不重要。它也可能只是: from someTable select col1 where attr1 = key1 and attr2 = key2
解决方案
的概念zip
不能很好地映射到 SQL。虽然少数数据库有数组,但大多数没有。SQL 行没有固有的顺序。您不会说“将表 A 的第一行与表 B 的第一行匹配”,因为没有第一行。
您可以解释您的问题的一种方法是使用in
匹配多个值。例如,如果您想选择 ID 与 ID 列表匹配的所有行...
create table1 (
id integer primary key,
some_data integer
);
select some_data
from table1
where id in (1, 2, 3);
这将返回1 或 2 或 3some_data
的所有行中的值。id
另一种解释是根据某些标准将两个表连接在一起。例如...
create table1 (
id integer primary key
);
create table2 (
id integer primary key,
table1_id integer references table2(id)
);
select *
from table1
join table2 on table1.id = table2.table1_id
where table2.id = (6, 7, 8);
这匹配 table1 中的行,这些行在 table2 中具有匹配条目,其id
在 table2 中为 6、7 或 8。
也就是说,将那些硬编码的列表放入表中,临时表就可以了,并且将它们与其他表连接起来。
推荐阅读
- python - 如何使用 BeautifulSoup 仅提取某些字段
- android - 如何为来自另一个库的自定义视图设置抗锯齿?
- javascript - 将抽屉元素放置在菜单底部
- laravel - 无法让 Laravel-Filemanager 在远程服务器的子文件夹中工作
- c++ - 链接时如何跟踪库的需求?
- sqlite - 将查询结果设置为默认列值而不使用触发器
- scala - 如何使用 Scala 登录 Play Framework?
- systemd - 'systemd' 杀死普通用户子进程
- git - 签出的版本与 glide.lock 不匹配
- python - NoReverseMatch 在 /students/classes/Reverse 用于 'editclasses' 与参数 '('',)' 未找到