您好,我在下一个 SQL 代码中收到“错误代码:1146。表‘sakila.t’不存在”。
select distinct address.address
from (
select inventory.store_id,
count(inventory.inventory_id) as num_of_items
from inventory
group by inventory.store_id
) as T,
address,
store,
where T.num_of_items <= all (select num_of_items from T)
and store.store_id = T.store_id
and store.address_id = address.address_id
来自评论这应该返回库存中商品数量最少的商店的地址。
我认为这是因为我试图从子查询中的 T 获取信息,而 T 是一个变量,并且没有在 sakila 数据库中定义。这是问题吗?如果是的话为什么?如果没有,请告诉我代码有什么问题。谢谢。
最佳答案
要让这种 SQL 查询发挥作用,您需要分解任务。
首先,您尝试计算每个商店包含多少商品。这很简单,我想你是对的。
select inventory.store_id,
count(inventory.inventory_id) as num_of_items
from inventory
group by inventory.store_id
接下来,您想要找出哪家商店的商品数量最少。你这样做。
select inventory.store_id,
count(inventory.inventory_id) as num_of_items
from inventory
group by inventory.store_id
order by count(inventory.inventory_id) ASC
limit 1
接下来,您将其嵌套在一个查询中,该查询查找描述商店的数据。
select address.address
from (
select inventory.store_id,
count(inventory.inventory_id) as num_of_items
from inventory
group by inventory.store_id
order by count(inventory.inventory_id)
limit 1
) as T
join store on T.store_id = store.store_id
join address on store.address_id = address.address_id
这就是您需要的结果。这里的技巧是使用聚合子查询(count() ... order by ... limit 1)来查找您需要的特定项目,然后使用一堆
join`子句来收集将您需要显示的有关您找到的项目的数据放在一起。
当您调试和解决此类问题时,您可以从最简单的查询开始,并逐步构建查询集。
关于mysql - 在子查询中,我尝试从外部查询中定义的表中进行选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22308115/