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
表中有两行,并且id
2
存在,因此查询会为您提供具有该 id 的两行。
如果我们将其更改为:
id
--
1
2
3
5
有四行,但没有id
4
。查询为空。
0 行(如果不包含值 2 T.Id(。 2 行 ID T.Id 包含值 2