首页 > 解决方案 > 在 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

标签: pythonsql

解决方案


的概念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。

也就是说,将那些硬编码的列表放入表中,临时表就可以了,并且将它们与其他表连接起来。


推荐阅读