我使用的是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 |
基本上我想要所有修订版本的产品 - revision_status
为0,以查看哪些产品实际上有修订版。
例如:Product 3
没有任何价格变动,因此不应出现在最终结果中。
我尝试了以下内容:
select *
from product
JOIN revisions
on product.revisions_id = revisions.id
ORDER
BY product.name
但是,我仍然在我的表中获得Product 3
,我不知道如何获得其上包含revision_status为0的所有产品。
我非常感谢您的回复!
答案 0 :(得分:1)
在我的解释中,您正在寻找具有多个版本的产品。仅在revision_status = 0
上过滤不会产生预期的结果。以下查询可能会回答您的问题(查找具有1个以上修订版的产品):
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
这会产生您的预期结果。请参阅sqlfiddle上的示例。