我使用mysql,我有两个表:
产品表:
| id | name | prices | revision_id |
|----|-----------|--------|-------------|
| 1 | Produkt 1 | 10 | 1 |
| 2 | Produkt 1 | 4 | 2 |
| 3 | Produkt 1 | 2 | 3 |
| 4 | Product 2 | 42 | 4 |
| 5 | Produkt 2 | 43 | 5 |
| 6 | Produkt 3 | 78 | 6 |每种产品都有价格变动。这就是为什么名称仍然相同,但产品有不同的价格。
修订表:
| id | revision_status |
|----|-----------------|
| 1 | 1 |
| 2 | 0 |
| 3 | 0 |
| 4 | 1 |
| 5 | 0 |
| 6 | 1 | 在修订表中,0表示打开的更改,而不是批准的更改。1表示-关闭-一个批准的更改。
预期结果:
| id | name | prices | revision_id | revision_status |
|----|-----------|--------|-------------|-----------------|
| 1 | Produkt 1 | 10 | 1 | 1 |
| 2 | Produkt 1 | 4 | 2 | 0 |
| 3 | Produkt 1 | 2 | 3 | 0 |
| 4 | Product 2 | 42 | 4 | 1 |
| 5 | Produkt 2 | 43 | 5 | 0 |基本上,我希望所有有修订的产品-一个0的revision_status在它上,看看哪些产品实际上有修订。
例如:Product 3没有任何价格变化,因此它不应该出现在最终结果中。
我尝试了以下几点:
select *
from product
JOIN revisions
on product.revisions_id = revisions.id
ORDER
BY product.name然而,我仍然把Product 3放在我的桌子上,我不知道如何获得所有revision_status为0的产品。
我非常感谢你的回复!
发布于 2017-12-30 11:14:52
在我的解释中,您正在寻找有多个版本的产品。只对revision_status = 0进行过滤不会产生预期的结果。以下查询可能会回答您的问题(寻找那些有超过一个版本的产品):
SELECT *
FROM product AS p
INNER JOIN revisions AS r ON p.revision_id = r.id
WHERE p.name IN (
SELECT p.name
FROM product AS p
INNER JOIN revisions AS r ON p.revision_id = r.id
GROUP BY p.name
HAVING COUNT(r.revision_status) > 1)
ORDER BY p.name这会产生你预期的结果。参见木琴的示例。
https://stackoverflow.com/questions/48033029
复制相似问题