我有一个shipping
视图,其中包含两列:pack list (PL)
和orders
。
我想在特定集合中选择包含完全 pack list
的所有orders
。
约束:
样品:
+----+--------+
| PL | orders |
+----+--------+
| 1 | a |
+----+--------+
| 1 | b |
+----+--------+
| 1 | c |
+----+--------+
| 2 | c |
+----+--------+
| 2 | c |
+----+--------+
| 3 | a |
+----+--------+
| 3 | c |
+----+--------+
| 4 | a |
+----+--------+
| 4 | b |
+----+--------+
| 5 | a |
+----+--------+
| 5 | c |
+----+--------+
| 5 | c |
+----+--------+
我希望PL
完全具有订单a
和c
- > 3
和5
。
我已经找到了这个有效的解决方案:
SELECT PL FROM shipping WHERE PL NOT IN
(SELECT PL FROM shipping WHERE orders NOT IN('a','c'))
GROUP BY PL HAVING count(DISTINCT orders) = 2;
但我认为可以做更干净的事情,例如不依赖于集合中的订单数量,或者可能使用ROLLUP函数。
为了测试目的,我已经完成了SQL Fiddle,这里我创建了一个表,而不是一个将自动增量ID添加为primary key
的视图(但出于某种原因,自动增量不是'工作,也许我错过了一些语法)。
是否还有其他方法可以构建此查询?
答案 0 :(得分:0)
这些方面的东西:
SELECT PL
FROM shipping
GROUP BY PL
HAVING count(DISTINCT orders) = 2
AND count(DISTINCT CASE WHEN orders IN('a','c') THEN orders ELSE NULL END) = 2