我想创建一个名为 OrderSummary 的 View ,其中包含 CUSTOMER.FirstName、CUSTOMER.LastName、INVOICE.InvoiceDate 和发票总计(通过确定 INVOICE_ITEM.Quantity 的总和乘以 SERVICE.ServicePrice 来计算)。我想使用子查询来确定发票总额。感谢您的帮助。
CREATE VIEW OrderSummaryView AS
SELECT c.FirstName, c.LastName, i.InvoiceDate
FROM CUSTOMER c, INVOICE i, SERVICE s
WHERE c.CustomerID = i.InvoiceID
AND c.CustomerID = s.ServiceID;
SELECT sum(UnitPrice) * Quantity AS InvoiceTotal
FROM SERVICE, INVOICE_ITEM
WHERE SERVICE.ServiceID = invoice_item.InvoiceID
最佳答案
您应该首先处理 select 语句以包含特定于连接的语法
SELECT c.FirstName, c.LastName, i.InvoiceDate
FROM CUSTOMER c
JOIN INVOICE i ON c.CustomerID = i.InvoiceID
JOIN INVOICE_ITEM ii ON ii.InvoiceID = i.InvoiceID
JOIN SERVICE s ON ii.ServiceID = s.ServiceID;
然后我们可以添加您的其他子查询
SELECT c.FirstName, c.LastName, i.InvoiceDate, t.InvoiceTotal
FROM CUSTOMER c
JOIN INVOICE i ON c.CustomerID = i.InvoiceID
JOIN INVOICE_ITEM ii ON ii.InvoiceID = i.InvoiceID
JOIN SERVICE s ON ii.ServiceID = s.ServiceID
JOIN
( SELECT SUM(UnitPrice) * Quantity AS InvoiceTotal, i.InvoiceID
FROM SERVICE s
JOIN INVOICE_ITEM i ON i.InvoiceID = s.ServiceID
GROUP BY i.InvoiceID
) as t ON t.InvoiceID = i.InvoiceID;
有一点看起来有点可疑,那就是 customerid = Invoiceid = serviceid
您确定所有这些都是正确的 pk -> fk 关系吗?
要创建带有 subview 的 View ,您必须分两步完成
CREATE VIEW cust_inv_serv AS
SELECT c.FirstName, c.LastName, i.InvoiceDate, i.InvoiceID
FROM CUSTOMER c
JOIN INVOICE i ON c.CustomerID = i.InvoiceID
JOIN INVOICE_ITEM ii ON ii.InvoiceID = i.InvoiceID
JOIN SERVICE s ON ii.ServiceID = s.ServiceID;
CREATE VIEW OrderSummaryView AS
SELECT v.FirstName, v.LastName, v.InvoiceDate, v.InvoiceID, SUM(UnitPrice) * Quantity AS InvoiceTotal
FROM SERVICE s
JOIN INVOICE_ITEM i ON i.InvoiceID = s.ServiceID
JOIN cust_inv_serv v ON v.InvoiceID = i.InvoiceID
GROUP BY i.InvoiceID;
关于MySQL如何创建带有子查询的 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33359445/