sql - 如何创建视图 - SQL
问题描述
创建一个名为的视图,该视图nc_num_pos
显示所有nc_jobs
信息以及每行 nc_jobs 的 pos 总数。
请记住指定GROUP BY
子句中位于 中SELECT
但不在聚合函数中的所有列。
测试:
SELECT *
FROM nc_num_pos;
期待:
job_id cust_id job_date descr jobtype num_pos
---------- ---------- ---------- ---------- ---------- ----------
002 E05 1990-03-03 BUS REPORT N 2
得到:
***Runtime error***
Program does not use the nc_jobs view or is badly laid out.
从使用:
CREATE VIEW nc_num_jobs AS
SELECT b.job_id, b.cust_id, b.job_date, b.descr, b.jobtype, COUNT(po.job_id) as num_pos
FROM Bookjobs b, Publishers p
WHERE b.cust_id = b.cust_id
GROUP BY b.job_id
HAVING p.creditcode = 'C'
AND b.jobtype = 'N';
随着,架构是:
似乎无法得到预期的结果。使用了未知的 DBMS。表现得像 PostgreSQL 而不是 mysql。
解决方案
你的观点没有意义。我猜你打算:
CREATE VIEW nc_num_jobs AS
SELECT b.job_id, b.cust_id, b.job_date, b.descr, b.jobtype,
COUNT(po.job_id) as num_pos
FROM Bookjobs b JOIN
Publishers p
ON b.cust_id = b.cust_id
WHERE p.creditcode = 'C' AND b.jobtype = 'N'
GROUP BY b.job_id, b.cust_id, b.job_date, b.descr, b.jobtype;
笔记:
- 条件没有使用
HAVING
聚合函数,所以我认为它们是用作WHERE
条件的。 - 切勿在
FROM
子句中使用逗号。 始终使用正确、明确、标准的JOIN
语法。 - 我将所有未聚合的列包含在
GROUP BY
. 如果您正在学习 SQL,这是一个很好的做法。
推荐阅读
- javascript - 如何使用 Angular(非材质)制作切换深色主题
- sql - 错误:尝试在空表中首次加载表中的 Excel 数据时,Oracle Apex 中的“表名已存在”
- multilinestring - H.geo.LineString().X 未定义
- sql - 如何从 3 个不同的表中执行 INSERT INTO?
- swift - 在 SwiftUI 中,如何将导航栏放在内部视图中?
- java - Hibernate 无法提取 ResultSet。列名无效
- c++ - C++ 联合花括号初始化程序:“错误:预期的成员名称或';' 在声明说明符之后”
- python - 为什么 ThreadPool 会导致超过一个核心的 CPU 使用率?
- xcode - 如何获取文本以显示科普特日历日期 SwiftUI
- python - 单击带有 Tkinter 的按钮时,我无法打开文件对话框