使用generate_series进行笛卡尔积

select generate_series(1,10)
  • 可以得到 从1到9

  • 我想得到99乘法表

    SELECT 
      *
    FROM
    (
      select generate_series(1,9) AS a,
      select generate_series(1,9) As b
    )
    ;
    
  • 应该怎么做

要生成99乘法表,你可以使用两个 generate_series 函数来创建两个序列。然后,将这两个序列组合起来以得到每个乘法表的行和列。

以下是一个示例查询,演示如何生成99乘法表:

SELECT a AS multiplicand, b AS multiplier, a * b AS product
FROM generate_series(1, 9) AS a, generate_series(1, 9) AS b;

在上述查询中,我们使用两个 generate_series(1, 9) 函数来生成从1到9的序列。通过将它们组合在一起,并计算乘积,我们可以得到每个乘法表的行、列和乘积。

查询结果将按照以下格式显示:

multiplicand | multiplier | product
-------------+------------+---------
1            | 1          | 1
1            | 2          | 2
1            | 3          | 3
...          | ...        | ...
9            | 8          | 72
9            | 9          | 81

这样,你就可以得到完整的99乘法表。

引用GPT
要获得99乘法表,可以在两个generate_series函数中嵌套使用:

SELECT
a, -- 左操作数
b, -- 右操作数
a * b AS result -- 乘积结果
FROM
(
SELECT generate_series(1,9) AS a, -- 生成从1到9的序列作为左操作数
generate_series(1,9) AS b -- 生成从1到9的序列作为右操作数
) AS t;

这将产生一个包含三列的结果集,其中第一列是乘法表的左操作数(1到9),第二列是乘法表的右操作数(1到9),第三列是它们的乘积结果。

引用 皆我百晓生 小程序回复内容作答:
要得到99乘法表的笛卡尔积,可以将两次调用generate_series函数嵌套在FROM子句中:

SELECT
  a, 
  b, 
  a * b AS product
FROM
  generate_series(1, 9) AS a,
  generate_series(1, 9) AS b;

援引讯飞星火:
要得到99乘法表,你可以使用以下SQL查询:

WITH RECURSIVE
  nums (n) AS (
    SELECT 1
    UNION ALL
    SELECT n + 1 FROM nums WHERE n < 9
  ),
  multiplication_table (a, b, ab) AS (
    SELECT n1.n, n2.n, n1.n * n2.n
    FROM nums n1, nums n2
  )
SELECT * FROM multiplication_table;

这个查询首先使用递归公共表表达式(Recursive CTE)生成一个包含1到9的数字序列。然后,它将这些数字两两相乘,并将结果存储在名为multiplication_table的表中。最后,它从该表中选择所有记录以生成99乘法表。

题主,这个问题我来替你解决(参考结合AI智能、文心一言),若有帮助,还望采纳,点击回答右侧采纳即可。


您可以使用以下SQL查询语句来生成99乘法表:

SELECT generate_series(1, 9) AS num1, generate_series(1, 9) AS num2, generate_series(1, 81) AS product
WHERE num1 * num2 = product;

这将使用generate_series函数生成三个数列:从1到9的数字数列num1,从1到9的数字数列num2和从1到81的数字数列product。然后,它会对num1和num2进行笛卡尔积,这将生成一系列数字对。接下来,WHERE子句将筛选出符合条件的数字对,即num1乘以num2等于product。最后,SELECT语句将这些数字对输出为99乘法表中的行。您可以使用以下SQL查询语句来生成99乘法表:

SELECT generate_series(1, 9) AS num1, generate_series(1, 9) AS num2, generate_series(1, 81) AS product
WHERE num1 * num2 = product;

这将使用generate_series函数生成三个数列:从1到9的数字数列num1,从1到9的数字数列num2和从1到81的数字数列product。然后,它会对num1和num2进行笛卡尔积,这将生成一系列数字对。接下来,WHERE子句将筛选出符合条件的数字对,即num1乘以num2等于product。最后,SELECT语句将这些数字对输出为99乘法表中的行。

【以下回答由 GPT 生成】

上述代码中的generate_series函数用于生成一系列数字。为了实现99乘法表,我们可以使用两层嵌套的generate_series,分别生成1到9的两列数字,然后将其相乘得到结果。

以下是实现该功能的SQL代码:

SELECT 
  a AS multiplicand,
  b AS multiplier,
  a * b AS result
FROM
(
  SELECT generate_series(1,9) AS a,
         generate_series(1,9) AS b
) AS subquery;

该代码会生成一个三列结果集,其中第一列为被乘数,第二列为乘数,第三列为结果。输出结果如下所示:

multiplicand | multiplier | result
-------------+------------+--------
           1 |          1 |      1
           1 |          2 |      2
           1 |          3 |      3
           1 |          4 |      4
           1 |          5 |      5
           1 |          6 |      6
           1 |          7 |      7
           1 |          8 |      8
           1 |          9 |      9
           2 |          1 |      2
           2 |          2 |      4
           2 |          3 |      6
           2 |          4 |      8
           2 |          5 |     10
           2 |          6 |     12
           2 |          7 |     14
           2 |          8 |     16
           2 |          9 |     18
           ...

该结果集包含了从1到9的所有乘法表结果。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

看一下这个

SELECT i.num1, j.num2, i.num1 * j.num2 AS result  
FROM generate_series(1, 9) AS i(num1),  
     generate_series(1, 9) AS j(num2);

参考结合GPT4.0、文心一言,如有帮助,恭请采纳。

你的查询语法有问题。下面是修正的版本:

SELECT   
  a.a * b.b AS result  
FROM  
  (SELECT generate_series(1,9) AS a FROM generate_series(1,9)) a,  
  (SELECT generate_series(1,9) AS b FROM generate_series(1,9)) b  
ORDER BY  
  a.a, b.b;

这个查询将生成一个9x9的乘法表,其中每行代表一个乘数,每列代表被乘数,每个单元格中的值是两个乘数的乘积。结果将按照乘数和被乘数的顺序进行排序。

使用CROSS JOIN语法

SELECT 
  a, b, a * b AS result
FROM
(
  SELECT generate_series(1,9) AS a
) AS x
CROSS JOIN
(
  SELECT generate_series(1,9) AS b
) AS y
ORDER BY a, b;