繁体   English   中英

为什么这个 sql 片段总是返回 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)更改为相同的值时,它返回一个值为 1 而不是 8 的表,但所有其他实例无论数字不同,它都返回 8。 我用在线 sql 执行器对其进行了测试。

这是查询的作用:

  • 公共表表达式( with子句中的子查询)生成由两行组成的派生表

  • 然后,在外部查询中, from子句两次生成此结果集的笛卡尔积:总共 8 行 ( 2 * 2 * 2 )

  • select子句计算行数 - 即8

with子句中行的内容无关紧要:这个56很可能是foobar ,或者nullnull ,结果将是相同的。

区别在于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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM