以下 SQL 查询可以返回多少行?



sql.有一个表 T,其中包含包含 N 行的 id 字段(可选唯一(。以下 SQL 查询可以返回多少行?

select * from T
inner join (
select count(*) as cnt from T 
union all select count(*) as cnt from T
) as TA on TA.cnt = T.id
inner join (
select count(*) as cnt from T 
union select count(*) as cnt from T
) as TB on TB.cnt = T.id;

我有一些选择:

  • 只有 N 行

  • 从 0 行到 N 行

  • 从 2N 行到 4N 行

或者你能说出其他一些选择吗?

此查询不返回任何行或 2 行(所有三列具有相同的值(。

理由:

  • union all子查询(别名TA(返回 2 行,每行包含相同的值,即T中的记录计数。

  • union子查询删除其结果并返回单个记录,其中还包含表的行计数

  • 接下来发生的情况取决于表中是否存在id等于该数字的记录。

    • 如果存在此类记录,则查询返回 2 行:union all子查询生成的每行一行。

    • 如果没有此类记录,则查询根本不返回任何行。

所以假设这个数据集:

id
--
1
2

表中有两行,并且id2存在,因此查询会为您提供具有该 id 的两行。

如果我们将其更改为:

id
--
1
2
3
5

有四行,但没有id4。查询为空。

0 行(如果不包含值 2 T.Id(。 2 行 ID T.Id 包含值 2

相关内容

最新更新