MySQL如何创建带有子查询的 View ?

标签 mysql select subquery

我想创建一个名为 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/

相关文章:

python - 异常处理: exception being handled multiple times

php - PDO 绑定(bind)参数空值

java - MySQL 连接器到 JDBC 的类路径 - 无法加载驱动程序

mysql - 选择并加入 mysql 中的表

sql - 如果没有找到记录则返回一个值

MYSQL:如何在子查询中正确使用外部别名?

Mysql 查询过去 14 天的事件(每两周一次)

mysql - SQL - 当记录不存在时不从另一个表中检索记录

sql - SQL ANY 和 SOME 关键字在所有 SQL 方言中都是同义词吗?

MYSQL - 使用子查询和 JOIN 条件