获取具有特定revision_status

时间:2017-12-30 10:27:18

标签: mysql sql

我使用的是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的所有产品。

我非常感谢您的回复!

1 个答案:

答案 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上的示例。