为什么这个 sql 片段 return 总是 8 或 1?
Why does this sql snippet return 8 or 1 always?
结果是什么:
WITH Tbl AS (SELECT 5 AS A UNION SELECT 6 AS A)
SELECT COUNT(*) AS Tbl FROM Tbl AS A, Tbl AS B, Tbl AS C;
我知道结果应该是 8,但我不知道为什么。此外,当我将两个值(5 或 6)更改为相同的值时,它 returns a table 的值为 1 而不是 8 但所有其他实例它 returns 8 无论数字是多少如果他们不同。我用在线 sql 执行程序对其进行了测试。
查询的作用如下:
公共 table 表达式(with
子句中的子查询)生成由两行组成的派生 table
然后,在外部查询中,from
子句两次生成此结果集的笛卡尔积:总共 8 行 (2 * 2 * 2
)
select
子句计算行数 - 即 8
with
子句中行的内容无关紧要:这个 5
和 6
很可能是 foo
和 bar
,或者 null
和 null
,结果是一样的。
不同之处在于 with
子句生成的 行 的数量。如果它只生成一行,结果将是 1
(1 * 1 * 1
)。如果它生成 3 行,您将得到 27
- 依此类推。
这个表达式:
WITH Tbl AS (SELECT 5 AS A UNION SELECT 6 AS A)
创建一个包含两行的(派生的)table。
这个表达式:
WITH Tbl AS (SELECT 5 AS A UNION SELECT 5 AS A)
创建一个(派生的)table 一行,因为 UNION
删除了重复项。
查询的其余部分只计算 3 向笛卡尔积中的行数,即 111 或 222.
结果是什么:
WITH Tbl AS (SELECT 5 AS A UNION SELECT 6 AS A)
SELECT COUNT(*) AS Tbl FROM Tbl AS A, Tbl AS B, Tbl AS C;
我知道结果应该是 8,但我不知道为什么。此外,当我将两个值(5 或 6)更改为相同的值时,它 returns a table 的值为 1 而不是 8 但所有其他实例它 returns 8 无论数字是多少如果他们不同。我用在线 sql 执行程序对其进行了测试。
查询的作用如下:
公共 table 表达式(
with
子句中的子查询)生成由两行组成的派生 table然后,在外部查询中,
from
子句两次生成此结果集的笛卡尔积:总共 8 行 (2 * 2 * 2
)select
子句计算行数 - 即8
with
子句中行的内容无关紧要:这个 5
和 6
很可能是 foo
和 bar
,或者 null
和 null
,结果是一样的。
不同之处在于 with
子句生成的 行 的数量。如果它只生成一行,结果将是 1
(1 * 1 * 1
)。如果它生成 3 行,您将得到 27
- 依此类推。
这个表达式:
WITH Tbl AS (SELECT 5 AS A UNION SELECT 6 AS A)
创建一个包含两行的(派生的)table。
这个表达式:
WITH Tbl AS (SELECT 5 AS A UNION SELECT 5 AS A)
创建一个(派生的)table 一行,因为 UNION
删除了重复项。
查询的其余部分只计算 3 向笛卡尔积中的行数,即 111 或 222.