加入笛卡尔积

时间:2014-01-30 22:38:08

标签: sql relational-algebra cartesian-product

这是交易,我有这个SQL查询

SELECT *
FROM Customers AS C, Orders AS O, Orderlines AS OL
WHERE C.CustomerID = O.CustomerID AND O .OrderID = OL.OrderID

在关系代数中是

Σ(C.CustomerID=O.CustomerID AND O.OrderID=OL.OrderID)(Customers x Orders x Orderlines) .

如何将这种3路笛卡尔积转换为“连接关系”?

提前多多感谢。

如果我对关系代数部分有误,请纠正我。

2 个答案:

答案 0 :(得分:2)

似乎非常直接......

SELECT c.*, o.*, ol.*
FROM Customers c
INNER JOIN Orders o ON c.CustomerId = o.CustomerID
INNER JOIN OrderLines ol ON o.OrderId = ol.OrderId

我建议不要从每个表中选择*,特别是考虑到重复的列名。

答案 1 :(得分:1)

SELECT *
FROM Customers AS C
     JOIN Orders AS O ON C.CustomerID = O.CustomerID
     JOIN Orderlines AS OL ON O.OrderID = OL.OrderID