You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL家族表SQL查询求助:修正获取Fay姑姑、Hana男性堂兄的语句

基础SQL查询修正:家族表关联问题

表结构说明

使用的家族表结构如下,其中parent_id关联同表的id字段:

idnamegenderparent_id
1Adam男NULL
2Alvin男1
3Chris男1
4Michael男1
5Lala女1
6Matt男2
7Fay女2
8Percy男3
9Jackson男3
10Hana女4
11Hani女4

任务1:获取Fay的姑姑

错误代码

SELECT aunt.*
FROM family AS aunt
JOIN family AS parent ON aunt.parent_id = parent.id
JOIN family AS cousin ON parent.id = cousin.parent_id
WHERE cousin.id = 7 AND aunt.gender = 'female';

问题分析

原逻辑错误:当前关联会查找与Fay同父母的女性(即Fay的姐妹),但Fay没有姐妹,且完全没关联到Fay的父系长辈,无法定位到姑姑(父亲的姐妹)。

修正后代码

SELECT aunt.*
FROM family AS fay
JOIN family AS fay_parent ON fay.parent_id = fay_parent.id
JOIN family AS aunt ON aunt.parent_id = fay_parent.parent_id
WHERE fay.id = 7 
  AND aunt.gender = 'female' 
  AND aunt.id != fay_parent.id;

逻辑说明

  1. 先定位Fay的记录;
  2. 关联找到Fay的父亲(fay_parent);
  3. 找到与Fay父亲同父母的女性,排除父亲本人(虽父亲为男性,此判断可省略,但更严谨),即为Fay的姑姑(Lala)。

任务2:获取Hana的男性堂兄

错误代码

SELECT male_cousin.*
FROM family AS cousin
JOIN family AS parent ON cousin.parent_id = parent.id
JOIN family AS grandparent ON parent.parent_id = grandparent.id
JOIN family AS male_cousin ON grandparent.id = male_cousin.parent_id
WHERE cousin.id = 10 AND male_cousin.gender = 'male';

问题分析

原逻辑错误:直接将male_cousin的父级关联到祖父,得到的是Hana的叔叔(父亲的兄弟),而非堂兄(叔叔的儿子)。

修正后代码

SELECT male_cousin.*
FROM family AS hana
JOIN family AS hana_parent ON hana.parent_id = hana_parent.id
JOIN family AS uncle ON uncle.parent_id = hana_parent.parent_id 
  AND uncle.gender = 'male' 
  AND uncle.id != hana_parent.id
JOIN family AS male_cousin ON male_cousin.parent_id = uncle.id 
  AND male_cousin.gender = 'male'
WHERE hana.id = 10;

逻辑说明

  1. 定位Hana的记录;
  2. 关联找到Hana的父亲(hana_parent);
  3. 找到Hana父亲的兄弟(同父母、男性、排除父亲本人),即叔叔;
  4. 关联找到这些叔叔的儿子,且为男性,即为Hana的男性堂兄(Matt、Percy、Jackson)。

内容的提问来源于stack exchange,提问作者user19591044

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 21:30:32