【发布时间】:2020-07-09 01:31:45
【问题描述】:
我在这里有一个问题,如何将 count(*) 从另一个表连接到基础表。
问题如下:
表:客户
+-------------+---------+
| Column Name | Type |
+-------------+---------+
| customer_id | int |
| product_key | int |
+-------------+---------+
product_key 是 Product 表的外键。
表格:产品
+-------------+---------+
| Column Name | Type |
+-------------+---------+
| product_key | int |
+-------------+---------+
product_key 是该表的主键列。
为报告编写 SQL 查询,该报告提供客户表中购买了 Product 表中所有产品的客户 ID。
例如:
客户表:
+-------------+-------------+
| customer_id | product_key |
+-------------+-------------+
| 1 | 5 |
| 2 | 6 |
| 3 | 5 |
| 3 | 6 |
| 1 | 6 |
+-------------+-------------+
产品表:
+-------------+
| product_key |
+-------------+
| 5 |
| 6 |
+-------------+
结果表:
+-------------+
| customer_id |
+-------------+
| 1 |
| 3 |
+-------------+
购买了所有产品(5 和 6)的客户是 id 为 1 和 3 的客户。
我的做法是:
select distinct
c.customer_id
from customer as c join (
select
count(distinct product_key) as total
from product
) as t
group by c.customer_id
having count(distinct c.product_key) = t.total
但是我会遇到如下错误信息:
Unknown column 't.total' in 'having clause'
你介意找出我哪里做错了吗?感谢您的帮助。
【问题讨论】:
-
我不确定您是否可以在
HAVING子句中引用子选择中的列。 “SQL 标准要求 HAVING 必须仅引用 GROUP BY 子句中的列或聚合函数中使用的列。但是,MySQL 支持对此行为的扩展,并允许 HAVING 引用 SELECT 列表中的列和外部子查询中的列作为好吧。” -
请在代码问题中给出minimal reproducible example--cut & paste & runnable code,包括最小的代表性示例输入作为代码;期望和实际输出(包括逐字错误消息);标签和版本;明确的规范和解释。给出尽可能少的代码,即您显示的代码可以通过您显示的代码扩展为不正常的代码。 (调试基础。)对于包含 DBMS 和 DDL(包括约束和索引)和输入为格式化为表的代码的 SQL。 How to Ask 包括 DBMS 版本。
-
请在考虑发布之前阅读您的教科书和/或手册和谷歌任何错误消息或您的问题/问题/目标的许多清晰、简洁和精确的措辞,有或没有您的特定字符串/名称和站点:stackoverflow.com & 标签;阅读许多答案。如果您发布问题,请使用一个短语作为标题。反映你的研究。请参阅How to Ask 和投票箭头鼠标悬停文本。
-
谢谢你,@tadman。我想知道我是否在我的代码中引用了外部子查询?我使用外连接连接原始表和汇总计数表。