我有一点SQL问题,我希望有人可以提供帮助。
在我的网站上,有人可以订购产品,然后订购该产品的选项,例如:他们买车,以及轮胎,立体声系统等选项。客户可以为同一主要项目(汽车)添加多个项目到他们的购物篮,但随后可以选择不同的选项,例如:
汽车,倍耐力,b& o 汽车,米其林,b& o我有这个数据库结构来实现这个目标:
orders
----------
order_ref
total
orders_parts
------------
id
order_ref
part_id
quantity
orders_parts_options
--------------------
id
option
orders
------
12345 1000.01
orders_parts
------------
1001 12345 Audi 1
1002 12345 Audi 1
orders_parts_options
--------------------
1001 michelin
1001 b&o
1002 pirelli
1002 b&o
所以在这里你可以看到我的购物篮中有两个Audis,一个带有michelin,一个带有倍耐力,两个带有B& O音频系统。我的问题;让我们说另一个电话是为了这个订单添加一个项目到购物篮,例如另一辆奥迪与米其林和B& O,我需要什么SQL来获得1001的orders_parts.id?
我想出了一点垃圾:
SELECT op.id FROM orders_parts op
INNER JOIN orders_parts_options opo ON (op.id = opo.id)
WHERE op.order_ref = 12345 AND (opo.option = 'michelin' OR opo.option = 'b&o')
但我得到了这个结果
1001
1001
1002
从那起。我猜我需要聚合它并且在那里有一个count = 2,但是无法解决它。那些能帮助我的人更聪明吗?
(只是为了补充一点,数据库在现实生活中是标准化的,但为了清楚起见,我还有全文值)。
答案 0 :(得分:1)
SELECT op.id, count(op.id) as n FROM orders_parts op
INNER JOIN orders_parts_options opo ON (op.id = opo.id)
WHERE op.order_ref = 12345 AND (opo.option = 'michelin' OR opo.option = 'b&o')
GROUP BY op.id;
此查询检索order_ref = 12345的所有部分(及其编号),其中option ='michelin'或option ='b& o'