SQL中如何关联唯一字段查询非唯一值并验证结果行数?
解决两个SQL问题:保留同名不同ID的name,以及验证结果行数
一、获取每个唯一ID对应的name(同名不合并)
你提到用SELECT DISTINCT name FROM Names;会合并同名结果,这很正常——DISTINCT是对查询返回的字段整体去重,这里只选了name,所以所有重复的name自然会被合并。
要实现“不同ID对应的同名name分别显示”的需求,其实非常简单:直接去掉DISTINCT,查询所有name即可:
SELECT name FROM Names;
因为你的表中每个id都是唯一的,每一行对应一个唯一的id和它绑定的name,所以这个查询会返回每一行的name,包括重复的(比如例子里的两个Jack),完全匹配你想要的目标输出。
二、验证结果行数是否为18013行
要验证目标结果的总行数,你可以用以下几种实用方法:
方法1:直接统计原表总行数
因为你的目标结果是每一个唯一id对应一行name,而原表中每个id都是唯一的,所以原表的总行数就是目标结果的行数。执行这条语句就能得到数值:
SELECT COUNT(*) FROM Names;
把返回的数字和18013对比即可。
方法2:直接统计查询结果的行数
如果想直接验证你最终查询(比如SELECT name FROM Names;)的返回行数,可以把它嵌套成子查询,外层用COUNT(*)统计:
SELECT COUNT(*) FROM ( SELECT name FROM Names ) AS result_set;
这个查询的结果就是目标结果的总行数,直接和18013核对就行。
方法3:统计唯一ID的数量
因为每个id都是唯一的,所以唯一id的数量等于目标结果的行数,你也可以用这条语句来验证:
SELECT COUNT(DISTINCT id) FROM Names;
如果返回结果是18013,就说明你的目标结果行数完全正确。
内容的提问来源于stack exchange,提问作者Dinoman44 - 101
相关产品推荐
相关产品推荐

