如何从数据库同一张表中筛选id与parent_id匹配的记录?
数据库表记录筛选方案
第一种情况:筛选同一行中id与parent_id值相同的记录
直接通过字段相等条件过滤即可,SQL语句如下:
SELECT * FROM your_table WHERE id = parent_id;
这条语句会返回所有id和parent_id值完全一致的行,比如示例中id=2、parent_id=2的记录。
第二种情况:筛选id与parent_id分布在不同行的关联记录
这类场景是指某一行的parent_id等于另一行的id(即父子记录分属不同行),可以通过自连接或者存在子查询实现:
方式1:自连接(同时获取父子两行数据)
SELECT a.id AS child_id, a.name AS child_name, a.parent_id, b.id AS parent_id, b.name AS parent_name FROM your_table a INNER JOIN your_table b ON a.parent_id = b.id WHERE a.id != b.id; -- 排除同一行的情况,避免和第一种结果重复
通过将表自身连接,关联条件设为子记录的parent_id等于父记录的id,可以同时查询出关联的父子记录详情。
方式2:存在子查询(仅获取存在关联父记录的子记录)
如果只需要获取那些存在对应父记录的子行,可使用EXISTS子查询:
SELECT * FROM your_table a WHERE EXISTS ( SELECT 1 FROM your_table b WHERE b.id = a.parent_id AND a.id != b.id );
内容的提问来源于stack exchange,提问作者user16846263
相关产品推荐
相关产品推荐

