如何查询AccountNo未出现在ParentAccountNo中的账户数据?
解决方案:找出未作为父账号的账户记录
嘿,这需求很明确——我们要从Accounts表中筛选出那些AccountNo从未在任何记录的ParentAccountNo字段中出现过的行。下面给你两种适用于MySQL和SQL Server的实现方案:
方法一:使用NOT IN子查询
这种方法逻辑直观,先找出所有存在的父账号,再排除那些属于父账号的账户:
SELECT AccountNo, ParentAccountNo, name FROM Accounts WHERE AccountNo NOT IN ( -- 先筛选出所有非空的父账号值 SELECT ParentAccountNo FROM Accounts WHERE ParentAccountNo IS NOT NULL );
⚠️ 注意:必须在子查询中过滤掉ParentAccountNo为NULL的记录,因为NOT IN子句中如果包含NULL,会导致整个查询返回空结果(SQL中任何值和NULL比较的结果都是未知)。
方法二:使用LEFT JOIN+IS NULL
这种方法通过左连接来匹配父账号关系,未匹配到的就是我们要找的记录,在数据量较大时性能通常更优:
SELECT a.AccountNo, a.ParentAccountNo, a.name FROM Accounts a -- 左连接自身,匹配当前账号作为父账号的情况 LEFT JOIN Accounts p ON a.AccountNo = p.ParentAccountNo -- 没有匹配到的,说明该账号从未作为父账号出现 WHERE p.ParentAccountNo IS NULL;
两种方法执行后都会得到你预期的结果:
+-----------+-----------------+------+ | AccountNo | ParentAccountNo | name | +-----------+-----------------+------+ | 4 | 2 | DEF | | 6 | 3 | MNO | | 7 | 5 | JKL | +-----------+-----------------+------+
内容的提问来源于stack exchange,提问作者Dennis Liu
相关产品推荐
相关产品推荐

