为什么此sql代码段总是返回8或1?

问题描述

结果是什么

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或{ {1}}和null,结果将相同。

与众不同的是null子句生成的的数量。如果仅生成一行,则结果为with1)。如果它生成3行,您将得到1 * 1 * 1-依此类推。

,

此表达式:

.popupcorner

创建一个包含两行的(派生)表。

此表达式:

.card

使用一行创建一个(派生的)表,因为WITH Tbl AS (SELECT 5 AS A UNION SELECT 6 AS A) 删除了重复项。

查询的其余部分仅计算3维笛卡尔积的行数,即1 1 1或2 2 2。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...