如何创建视图 - SQL

时间:2018-05-24 08:56:45

标签: sql create-view

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

GOT:

***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';

使用,架构为:

View schema image

似乎无法得到预期的结果。使用了未知的DBMS。表现得像PostgreSQL而不是mysql。

1 个答案:

答案 0 :(得分:0)

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

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