我有2个表,其中一个表具有交易记录(ProductId | TransactionId | CustomerID),另一个表具有产品描述(ProductId | ProductName)。
我曾尝试使用INNER JOIN
,但只设法选择了购买该特定产品的客户。
答案 0 :(得分:0)
假设您有下表:
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的所有行(我在“项目”中使用别名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 (?)