首页 > 解决方案 > 如何创建视图 - 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。

标签: sqlcreate-view

解决方案


你的观点没有意义。我猜你打算:

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,这是一个很好的做法。

推荐阅读