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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 14:30:45