我有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 (?)