当前位置: 首页 > 面试题库 >

Count()和左联接问题

徐弘图
2023-03-14
问题内容

我的查询有问题,该查询显示商店列表以及与之关联的产品数量。我已经玩了很长时间的左联接等,但无济于事。这些表具有以下结构:

商店含有表列:idname

产品含表列:idnamestatusshop

查询如下:

select s.name
       , p.name
       , count(p.id) 
from   Product as p 
       left join Shop as s on p.shop=s.id
where  p.status <> '8796107276379'
group by 
       s.id

我没有去买有0件商品的商店。请问我该如何实现?

基础数据库是MySQL。

谢谢!马耳他


问题答案:

您需要在左侧购物,因为右侧可能没有数据,在本例中为PRODUCT。

不仅如此,您还需要WHERE条件作为LEFT-JOIN
ON条件,这样它就可以在状态条件下加入产品,并且即使不需要状态,也可以打折产品(在保持销售状态的同时)。

select s.name
       , p.name
       , count(p.id) 
from   Shop as s
       left join Product as p on p.shop=s.id AND p.status <> '8796107276379'
group by 
       s.id, p.name


 类似资料:
  • 问题内容: 我有三个表: 命令 OrderId,int PK CustomerId,与客户之间为int FK,允许为NULL 顾客 CustomerId,int PK CompanyId,将FK转换为Company,不允许为NULL 公司介绍 CompanyId,int PK 名称nvarchar(50) 我想选择所有订单,无论是否有客户,如果有客户,也要选择客户的公司名称。 如果我使用此查询…

  • 问题内容: 这个问题已经在这里有了答案 : SQL中左右联结与左右联结之间的区别[重复] (4个答案) 6年前关闭。 我看到过称为LEFT OUTER JOIN或RIGHT OUTER JOIN的联接。在某些地方,我见过LEFT JOIN或RIGHT JOIN。我对此感到困惑。 我两天前发布了一个问题,但我无法理解解决方案提供的链接。 这些连接类型是否相同,或者两者之间有区别? 问题答案: 两者之

  • 表列如下: Users表(表名:Users): [用户表] Friends表(表名:Friends): “好友表” 我的Sql代码: 留下下面一栏: “离开栏” 如何修复此缺失的查询?请帮帮我.

  • 问题内容: 我有一个表,我们称它为“ a”,它在涉及许多表的视图中用在左联接中。但是,我只想返回“ a”的行(如果它们也与另一个表“ b”联接)。所以现有的代码看起来像 但它返回的行太多,尤其是其中a在b中不匹配的行。我试过了 这给了我正确的结果,但是不幸的是,“ EXPLAIN PLAN”告诉我们,这样做会导致强制对a和b进行全表扫描,这使事情变得很慢。我的一位同事在b上建议了另一个LEFT J

  • 问题内容: 假设我有两个表orgs和状态orgs是(o_ID,state_abbr),而状态是(state_abbr,state) 我想创建一个视图,显示每个状态下的o_ID计数: 我将使用哪种SQL语句?我尝试过的仅显示第一个状态,并对所有计数求和。 先感谢您。 问题答案:

  • 问题内容: 我知道SQL Server中的联接。 例如。有两个表Table1,Table2。 它们的表结构如下。 表1的数据如下: 表2数据如下: 如果我执行下面提到的两个SQL语句,则两个输出将是相同的 请在上述SQL语句中说明左右联接之间的区别。 问题答案: Select * from Table1 left join Table2 … 和 确实是完全可以互换的。但是,请尝试(或同一对)进行区