首页 > 解决方案 > 如何为 SQL 执行相当于双循环附加的操作

问题描述

我在具有 2 列的 SQL(Presto,也是 sql 的新手)中设置此表,col1这两col2列是从其他两个现有表table1table2. 为简单起见,假设col1fromtable1有 3 个值,col2fromtable2有 2 个值。我希望我要创建的表看起来像这样(我们称之为table3,我将用它col1.1来表示该 col 中的第一个值,依此类推):

col1     |    col 2
--------------------
col1.1   |   col2.1
col1.1   |   col2.2
col1.2   |   col2.1
col1.2   |   col2.2
col1.3   |   col2.1
col1.3   |   col2.2

我知道如何使用 Pandas 在 Python 中执行此操作,就像我在这里所做的那样(虚拟示例):

a = [1, 2, 3]
b = ['sam', 'john']
combined_lst = []
for i in a:
    for j in b:
        combined_lst.append({'col1': i, 'col2': j})
table = pandas.io.json.json_normalize(combined_lst)
print(table)

表输出:

   col1  col2
0     1   sam
1     1  john
2     2   sam
3     2  john
4     3   sam
5     3  john

基本上它应该是上面那个表格的格式。我已经考虑UNION ALL过反复尝试,但我不太确定我是否走在正确的轨道上

标签: sqldataframepresto

解决方案


我想你想要一个cross join

select row_number() over (order by t1.col1, t2.col2) as id, t1.col1, t2.col2
from table1 t1 cross join
     table2 t2;

row_number()万一第一列应该是数据的一部分。


推荐阅读