【发布时间】:2015-03-09 15:26:14
【问题描述】:
这是我的表结构:
Product(ID, Barcode, Name)
ChildProduct(ProductID, Barcode)
ChildProduct(ProductID) REFERENCES Product(ID)
这是一些示例数据:
Product
(1,100,'A')
(2,200,'B')
(3,300,'C')
(4,400,'D')
ChildProduct
(1,101)
(1,102)
(2,201)
(4,401)
这是想要的结果:
(1,100,'A')
(1,101,'A')
(1,102,'A')
(2,200,'B')
(2,201,'B')
(3,300,'C')
这可以通过联合很容易地实现:
SELECT * FROM Product
WHERE ID IN (1,2,3)
UNION
SELECT * FROM ChildProduct cp
JOIN Product p ON (p.Id = cp.ProductID)
WHERE p.ProductID IN (1,2,3)
然而,实际上,这个查询的WHERE 部分是一个复杂的连接构造,所以我真的很想避免使用UNION,这样我就不必复制所有代码了。
如何在不复制 where 子句的情况下获得相同的结果?
编辑:看起来我简化了一点。我稍微调整了一下,表明无论如何我都必须加入 ChildProduct 和 Product。
我真正在寻找的是一种彻底解除工会的方法。
【问题讨论】:
-
对整个联合查询应用
where子句。 Oracle 应该能够单独下推每个查询中的限制。