是否有查询选择哪些客户购买了特定产品以及这些客户购买了哪些其他产品?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了是否有查询选择哪些客户购买了特定产品以及这些客户购买了哪些其他产品?相关的知识,希望对你有一定的参考价值。
我有2个表,一个表上有事务(ProductId | TransactionId | CustomerID),另一个表有产品描述(ProductId | ProductName)。
我尝试过使用INNER JOIN
,但只设法选择购买该特定产品的客户。
答案
假设您有以下表格:
mysql> EXPLAIN transactions;
+---------------+------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+------------+------+-----+---------+----------------+
| Id | bigint(20) | NO | PRI | NULL | auto_increment |
| ProductId | bigint(20) | YES | | NULL | |
| TransactionId | bigint(20) | YES | | NULL | |
| CustomerId | bigint(20) | YES | | NULL | |
+---------------+------------+------+-----+---------+----------------+
您首先阅读了您想要的产品和客户的行:
SELECT
t.TransactionId
FROM
transactions t
WHERE
t.CustomerId = 4 AND
t.ProductId = 9;
这将生成如下内容:
+---------------+
| TransactionId |
+---------------+
| 7 |
+---------------+
然后在同一个表上使用JOIN
来获取具有该事务id的所有行(我在“items”中使用别名i
)。
SELECT
i.ProductId,
i.TransactionId,
i.CustomerId
FROM
transactions t
JOIN
transactions i ON t.TransactionId = i.TransactionId
WHERE
t.CustomerId = 4 AND
t.ProductId = 9;
你可能得到这样的结果:
+----+-----------+---------------+------------+
| Id | ProductId | TransactionId | CustomerId |
+----+-----------+---------------+------------+
| 1 | 3 | 7 | 4 |
| 2 | 4 | 7 | 4 |
| 3 | 9 | 7 | 4 |
+----+-----------+---------------+------------+
从那里你可以访问/加入products
表来获取名称。
请记住,您的表结构不适合3NF。您可能想要创建这样的表:
transactions
- Id
- CustomerId
- OrderDate
- [...]
products
- Id
- Name
transactionItems
- Id
- TransactionId
- ProductId
- Amount (?)
以上是关于是否有查询选择哪些客户购买了特定产品以及这些客户购买了哪些其他产品?的主要内容,如果未能解决你的问题,请参考以下文章