mysql - 在子查询中,我尝试从外部查询中定义的表中进行选择

标签 mysql sql

您好,我在下一个 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/

相关文章:

mysql - 通过基于值的决策使 MySQL 查询失败

mysql - 查询以选择数据库中今天日期的行数?

PHP根据同一表中另一列的值查询表列

Mysql:如何用同一表中另一行的值填充一行中的空值?

mysql - 显示一个表中的所有记录并匹配另一个表中的记录

mysql - 在 Select Mysql 语句中选择

sql - 在sql中将十六进制转换为字符串

mysql - SQL:仅返回没有任何符合条件的关联的记录

PHP/mySQL - 仅检索唯一元值的查询

php - 数据表不能与 php 一起使用