我想创建三个表。
我希望我的网络应用允许客户选择订单号,因此,它会显示该订单中的产品,所述产品的数量,产品的价格以及总价格我将在我的代码中动态计算的订单。
我的SQL看起来像这样
CREATE TABLE Products
(
ProductID int NOT NULL,
ProductDescription varchar(MAX) NOT NULL,
ProductPrice smallmoney NOT NULL,
PRIMARY KEY (ProductID)
)
CREATE TABLE Orders(
OrderID int NOT NULL,
CustomerName varchar(MAX) NOT NULL,
PRIMARY KEY (OrderID)
)
CREATE TABLE LineItem(
LineItemID int NOT NULL,
OrderID int NOT NULL FOREIGN KEY REFERENCES Orders(OrderID),
ProductID int NOT NULL FOREIGN KEY REFERENCES Products(ProductID),
Quantity int NOT NULL,
PRIMARY KEY (LineItemID)
)
这是包含关系的数据库图表。
以下是所有表格上的select all语句的结果
我的关系是否正确设置了我想达到的目标?我很抱歉,如果这看起来很简单,但我对此很新,虽然SQL语句非常简单,但关联表的方法却并非如此。
答案 0 :(得分:2)
SELECT p.ProductPrice, p.ProductDescription, o.CustomerName, l.Quantity
FROM LineItem AS l
INNER JOIN Products AS p ON l.ProductID=p.ProductID
INNER JOIN Orders AS o ON l.OrderID=o.OrderID
ORDER BY l.LineItemID
将提供来自所有这些表的组合信息。您可以添加要从中获取数据的任何其他列。
INNER JOIN
和JOIN
关键字是语法糖,具有相同的效果。当您按INNER JOIN
绑定两个表时,只会返回包含在这两个表中的结果。
使用ON
关键字,您将定义表的关系列。例如,在INNER JOIN Products AS p ON l.ProductID=p.ProductID
子句中,我定义表ProductID
的列Products
中的数据与表ProductID
的列LineItem
是关系的。
答案 1 :(得分:1)
您在产品和订单之间存在多对多关系,因此在 LineItem 的结构中table我认为您已经拥有主键(Product Id,OrderID),我认为您不需要 LocalItemID
CREATE TABLE LineItem(
OrderID int NOT NULL FOREIGN KEY REFERENCES Orders(OrderID),
ProductID int NOT NULL FOREIGN KEY REFERENCES Products(ProductID),
Quantity int NOT NULL,
PRIMARY KEY (OrderID ,ProductID )
)
您可以使用以下方法加入表:
SELECT p.ProductPrice, o.CustomerName, li.Quantity
FROM LineItem AS li
JOIN Products AS p ON li.ProductID=p.ProductID
JOIN Orders ON li.OrderID=o.OrderID