Mysql 如何避免子查询产生多个结果

Mysql 如何避免子查询产生多个结果,mysql,Mysql,大家好,我是MySQL的新手,这可能是 更容易提问,但我对mysql是全新的 我订了两张桌子,买了两张 桌子看起来像这样 秩序稳定 order id: ordername: shopnum(fk) 商店马厩* shopname: shopnum(pk): 我正在使用这样的子查询,以获取订单数量最多的店铺名称。。。。 像…19 XYZ商店 . 13 hjjddshop . 6锐步店 select shopname from shopstable where

大家好,我是MySQL的新手,这可能是

更容易提问,但我对mysql是全新的

我订了两张桌子,买了两张 桌子看起来像这样

秩序稳定

order id: 
ordername:
shopnum(fk)
商店马厩*

shopname:
shopnum(pk):
我正在使用这样的子查询,以获取订单数量最多的店铺名称。。。。 像…19 XYZ商店 . 13 hjjddshop . 6锐步店

select shopname 
from shopstable 
where shopnum in
    (select count(orderid) as highest ,shopnum 
     from orderTable 
     group by shopnum)

它抛出错误,显示列应为1,这是因为子查询返回2个结果…因此我如何避免此情况并获得适当的结果…将非常感谢帮助…:):)

删除查询中最高的计数(orderid)。。您应该在子查询中只选择一列

删除查询中最高的计数(orderid)。您应该在子查询中只选择一列

这不是抱怨,因为子查询返回两个结果,但返回两列。但是,即使它只返回一列,它也会返回两个结果,主查询也会这样做

在任何情况下都不需要子查询:

SELECT s.shopname 
FROM Shopstable s 
JOIN OrdersTable o ON s.shopnum=o.shopnum 
GROUP BY s.shopname 
ORDER BY count(*) DESC 
LIMIT 1

它没有抱怨,因为子查询返回2个结果,但返回两列。但是,即使它只返回一列,它也会返回两个结果,主查询也会这样做

在任何情况下都不需要子查询:

SELECT s.shopname 
FROM Shopstable s 
JOIN OrdersTable o ON s.shopnum=o.shopnum 
GROUP BY s.shopname 
ORDER BY count(*) DESC 
LIMIT 1
使用以下命令:

select shopname 
from shopstable 
where shopnum in
    (select shopnum 
     from orderTable 
     group by shopnum
     order by count(*) DESC
     limit 1)
使用以下命令:

select shopname 
from shopstable 
where shopnum in
    (select shopnum 
     from orderTable 
     group by shopnum
     order by count(*) DESC
     limit 1)

我想你想要这样的东西

SELECT shopname, count(*) as highest 
FROM shopstable 
INNER JOIN orderTable ON (shopstable = orderTable.shopname)
GROUP BY shopstable.shopname

我想这就是你想要的结果?

我想你想要这样的结果

SELECT shopname, count(*) as highest 
FROM shopstable 
INNER JOIN orderTable ON (shopstable = orderTable.shopname)
GROUP BY shopstable.shopname

我想这就是你想要的结果?

那么我如何获得订单数量最多的店铺名称列表我如何获得订单数量最多+1的店铺名称列表。但在我看来,您应该将中的
改为
=
。我考虑过,但决定保持原样。如果
orderTable
表为空,子查询返回零行,那么
中的
更合适(我认为当子查询为空时,严格的SQL不允许
=
,尽管默认情况下MySQL是允许的)。在标量子查询不返回任何行的上下文中,该值将被视为空。我很确定这是ANSI的标准行为;这就是我熟悉的所有数据库的工作方式。因此,除
之外的任何比较都为空
将不会计算为真。+1。但在我看来,您应该将
中的
改为
=
。我考虑过,但决定保持原样。如果
orderTable
表为空,子查询返回零行,那么
中的
更合适(我认为当子查询为空时,严格的SQL不允许
=
,尽管默认情况下MySQL是允许的)。在标量子查询不返回任何行的上下文中,该值将被视为空。我很确定这是ANSI的标准行为;这就是我熟悉的所有数据库的工作方式。因此,除
之外的任何比较都为空
将不会计算为真。