MySQL基础查询求助:查询拥有食物类资源的5只最年轻生物
新手SQL查询解决方案:找出拥有食物库存的5只最年轻生物
你的原始问题(翻译后)
我是纯新手,需要相关帮助。我需查询出在其inventory(库存)中拥有type(类型)为'food'(食物)的5只最年轻的creatures(生物)。请使用基础语句结构和命令,我是新手,希望能理解。我有三张表:
- inventory表:inventoryid, creatureid, resourceid, quantity
- resources表:resourceid, name, weight, quantity, dateofacquisiton, type
- creatures表:creatureid, name, type, bdate, weight, liftingcapacity
我尝试过的语句:
SELECT creature.name FROM creature,resource where resource.type = 'food' ORDER BY bdate ASC LIMIT 5;
你原有语句的问题
- 表名拼写错误:
creature应该是creatures,resource应该是resources - 未关联表之间的关系,直接写两个表会产生笛卡尔积(所有行无意义匹配),结果完全错误
- 排序逻辑错误:
ORDER BY bdate ASC是按出生日期从早到晚排,会选出最老的生物,最年轻的应该用DESC(从晚到早)
正确的基础SQL语句
用JOIN关联三张表,这是新手易理解的基础关联方式:
SELECT DISTINCT creatures.name, creatures.bdate FROM creatures JOIN inventory ON creatures.creatureid = inventory.creatureid JOIN resources ON inventory.resourceid = resources.resourceid WHERE resources.type = 'food' ORDER BY creatures.bdate DESC LIMIT 5;
语句逐部分解释
SELECT DISTINCT creatures.name, creatures.bdate:DISTINCT避免同一个生物因有多个食物库存重复显示,同时选出名称和出生日期方便验证结果FROM creatures:从生物表开始查询JOIN inventory ON creatures.creatureid = inventory.creatureid:通过creatureid关联生物表和库存表,找到每个生物对应的库存记录JOIN resources ON inventory.resourceid = resources.resourceid:通过resourceid关联库存表和资源表,找到库存对应的资源信息WHERE resources.type = 'food':筛选出资源类型为食物的记录ORDER BY creatures.bdate DESC:按出生日期从晚到早排序(出生日期越晚,生物越年轻)LIMIT 5:只取前5条结果
内容的提问来源于stack exchange,提问作者Nikssentis
相关产品推荐
相关产品推荐

