我有一个非常复杂的 SQL 查询(三个 INNER JOINS),它产生了一个易于阅读的结果集,如下所示(简化)。我继承了数据库,因此不可能更改任何现有表的结构,因此我必须执行复杂的查询才能达到这一点:
product_category | product_code
------------------------------------
Hardware 102
Hardware 104
Hardware 102
Software 205
Software 104
如果我然后简单地做一个GROUP BY
product_category、product_code,我会得到我感兴趣的大部分最终结果集:
product_category | product_code
------------------------------------
Hardware 102
Hardware 104
Software 205
Software 104
但是,缺少的是库存数量:
product_category | product_code | num_in_stock
--------------------------------------------------------
Hardware 102 2
Hardware 104 1
Software 205 1
Software 104 1
由于我希望能够COUNT()
直接从GROUP BY
语句中完成处理,所以我有点迷茫。
这是迄今为止的 SQL 查询:
SELECT categories.product_category, codes.product_code FROM stock
INNER JOIN products ON stock.product_id = products.id
INNER JOIN codes ON products.code_id = codes.id
INNER JOIN categories ON codes.category_id = categories.id
GROUP BY categories.product_category, codes.product_code
表格如下:
CATEGORIES
- 例如,“硬件”、“软件”CODES
- 例如,100、204(属于 acategory
)PRODUCTS
-categories
+的组合codes
,带有无用的版本#STOCK
- 产品条目,如果库存超过一个,则有多个条目
因此,之所以如此混乱,是version #
因为PRODUCTS
. 这意味着对于一个特定的组合(例如,“硬件 102”),它可以PRODUCTS
多次输入,每次都有不同的version #
值,这将导致STOCK
引用不同ids
from PRODUCTS
,即使对我来说,它是同一个产品. 啊!
有任何想法吗?
编辑:
假设有一个产品“Misc 999”有两个不同的版本。这意味着将有一个CATEGORIES
“Misc”条目,CODES
一个“999”条目(其中一个category_id
属于“Misc”),以及两个条目PRODUCTS
(两者都具有相同code_id
但具有不同的version
信息 - 我忽略了) .
然后,如果我们有 10 个库存(一个版本有 3 个,另一个版本有 7 个,但我忽略了版本信息),表中将有 10 个条目STOCK
,每个条目将PRODUCTS
通过一个id
(两个不同的 id,在这种情况下)。