[英]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)更改为相同的值时,它返回一个值为 1 而不是 8 的表,但所有其他实例无论数字不同,它都返回 8。 我用在线 sql 执行器对其进行了测试。
这是查询的作用:
公共表表达式( with
子句中的子查询)生成由两行组成的派生表
然后,在外部查询中, 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)
创建一个包含两行的(派生)表。
这个表达:
WITH Tbl AS (SELECT 5 AS A UNION SELECT 5 AS A)
创建一个只有一行的(派生)表,因为UNION
删除了重复项。
查询的其余部分只计算 3 路笛卡尔积中的行数,即 1 1 1 或 2 2 2。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.